Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 中断一项任务,然后继续_C#_Asp.net_Wpf_Multithreading - Fatal编程技术网

C# 中断一项任务,然后继续

C# 中断一项任务,然后继续,c#,asp.net,wpf,multithreading,C#,Asp.net,Wpf,Multithreading,我正在使用WPF构建一个ASP.NET应用程序,其中包含一个长期运行的异步任务,在某些情况下,需要向用户询问更多信息。是否有一种方法可以中断但不能取消任务,等待用户响应并根据结果继续 我所发现的只是在任务前后使用回调的方法。我尝试通过从主线程传递的SynchronizationContext的Send()调用UI线程方法,但它(有时)抛出空引用异常 更具体地说,我无法理解为什么此代码在调用Send()时抛出NullReferenceException: 受保护的无效页面加载(对象发送方,事件参数

我正在使用WPF构建一个ASP.NET应用程序,其中包含一个长期运行的异步任务,在某些情况下,需要向用户询问更多信息。是否有一种方法可以中断但不能取消任务,等待用户响应并根据结果继续

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

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

受保护的无效页面加载(对象发送方,事件参数e)
{
Task Task=新任务(DoSomeWork,新元组(SynchronizationContext.Current,new object());
task.Start();
}
公共无效DoSomeWork(对象状态)
{
元组cst=(元组)状态;
cst.Item1.发送(编写者,“消息”);
}
公共无效写入程序(对象s)
{
Label1.Text=(s作为字符串);
}

看看运行时中现在可用的异步和等待功能

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

这应该让你开始

更新 这里还有一些可能有用的链接


注意:新的C#5异步的东西有很多,但是如果你仔细看一下,C#4异步的东西也有很多,只是C#5现在是焦点,因此,您可能需要进一步筛选。

您使用的是哪一版本的.Net framework?4.0-我知道C#5中有一些新选项,如异步,但我希望应该有一个更老的等效选项…“我正在使用WPF构建ASP.Net应用程序”什么?WPF用于构建GUI应用程序,ASP用于web应用程序,您不能使用WPF构建ASP应用程序。此外,如果您的代码抛出
NullReferenceException
,则表示您的代码存在问题,而不是库存在问题。我们需要看到你的代码来帮助你。发布代码。如果我错了,请纠正我,但是典型ASP.NET应用程序中的web控件不是WPF的一部分吗?另一个选择是MVC。。。
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);
}