我正在使用WPF构建一个ASP.NET应用程序,该应用程序具有长时间运行的异步任务,在某些情况下,需要向用户询问更多信息。有没有办法可以中断但不取消任务,等待用户响应并根据结果继续?
我找到的只是在任务之前和之后使用回调的方法。我尝试通过从主线程传递的SynchronizationContext的Send()
调用UI线程方法,但它(有时)抛出Null引用异常。
更具体地说,我无法理解为什么这段代码在调用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);
}
答案 0 :(得分: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在目前的风头,所以你可能不得不进一步筛选一些事情。