中断任务并在之后继续

时间:2013-01-26 14:02:57

标签: c# asp.net wpf multithreading

我正在使用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);
}

1 个答案:

答案 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在目前的风头,所以你可能不得不进一步筛选一些事情。