0

我正在使用带有长时间运行的异步任务的 WPF 构建 ASP.NET 应用程序,在某些情况下,需要向用户询问更多信息。有没有办法可以中断但不能取消任务,等待用户响应并根据结果继续?

我所发现的只是在任务之前和之后使用回调的方法。我尝试Send()通过从主线程传递的 SynchronizationContext 调用 UI 线程方法,但它(有时)抛出 Null Reference Exception

更具体地说,我无法理解为什么这段代码在调用 Send() 时会抛出 NullReferenceException:

protected void Page_Load(object sender, EventArgs e)
{
    Task task = new Task(DoSomeWork, new Tuple<SynchronizationContext, object>(SynchronizationContext.Current, new object()));
    task.Start();
}

public void DoSomeWork(object state)
{
    Tuple<SynchronizationContext, object> cst = (Tuple<SynchronizationContext, object>)state;
    cst.Item1.Send(Writer, "Message");
}

public void Writer(object s)
{
    Label1.Text = (s as string);
}
4

1 回答 1

0

看看现在在运行时中可用的 Async 和 Await 的东西。

在这里创建一个明智的演示对我来说有点太多了,但我可以指出:

http://msdn.microsoft.com/en-gb/library/vstudio/hh191443.aspx

这应该让你开始。

更新

这里还有一些可能会有所帮助的链接。

http://code.jonwagner.com/2012/09/06/best-practices-for-c-asyncawait/

http://www.itwriting.com/blog/4913-a-simple-example-of-async-and-await-in-c-5.html

http://weblogs.asp.net/dixin/archive/2012/11/02/understanding-c-async-await-1-compilation.aspx

注意:有很多关于新的 C#5 异步的东西,但是如果你仔细看的话,仍然有很多 C#4 异步的东西,只是 C#5 在聚光灯下那一刻,所以你可能不得不进一步筛选一些东西。

于 2013-01-26T14:05:55.773 回答