C# 将数据异步发送回UI线程 目前我正在做一个涉及Windows工作流基础4的页面导航控件的项目。我可以通过阻止UI线程直到WF线程返回url来实现这一点

C# 将数据异步发送回UI线程 目前我正在做一个涉及Windows工作流基础4的页面导航控件的项目。我可以通过阻止UI线程直到WF线程返回url来实现这一点,c#,asp.net,workflow-foundation-4,C#,Asp.net,Workflow Foundation 4,但这也不实际,如果我的WF东西有很长的处理时间,那么UI线程将停止一段时间,用户没有意识到这一点 任何我可以从WF4异步返回url/页面数据并在UI上捕获的指南。有许多选项,但都围绕着创建多线程应用程序 我认为,最简单的*方法是使用类() 其他选项包括使用.NET 4.5中提供的async和wait关键字(如果您使用的是此版本的dotNET)。如果您使用的是旧版本,并且不想使用BackgroundWorker,则可以使用Task类来创建后台任务。更原始的方法包括使用和管理线程实例(如果任务类不可

但这也不实际,如果我的WF东西有很长的处理时间,那么UI线程将停止一段时间,用户没有意识到这一点


任何我可以从WF4异步返回url/页面数据并在UI上捕获的指南。

有许多选项,但都围绕着创建多线程应用程序

我认为,最简单的*方法是使用类()

其他选项包括使用.NET 4.5中提供的
async
wait
关键字(如果您使用的是此版本的dotNET)。如果您使用的是旧版本,并且不想使用
BackgroundWorker
,则可以使用
Task
类来创建后台任务。更原始的方法包括使用和管理
线程
实例(如果
任务
类不可用)。鉴于您正在使用WF4,一些较新的技术应该可以正常工作

需要注意的一点是,大多数从多线程开始的人都忘记了(已经做到了),您无法从另一个线程访问属于UI线程(应用程序的主线程)的资源!这就是为什么
BackgroundWorker
可能是一个很好的启动解决方案,因为它公开了两个事件(
ProgressChanged
RunWorkerCompleted
),允许您根据需要在UI上执行操作

*-我指的是最简单的开始!例如,
async
/
await
更适合于需要执行许多不同异步操作的应用程序,但同样地,在您掌握了多线程的基本诀窍之前,这些操作并不那么容易

实际上,您没有指定应用程序将执行多少异步操作,并且您提到了受.NET 4.0的限制(因此没有
async
/
wait
)。如果您需要执行许多不同的操作,我建议使用
任务


只要稍加努力,您就可以使用任务创建一个可工作的多线程应用程序,而无需创建意大利面代码,这可能是一场真正的噩梦。当您在服务中无法使用
Begin-End
async方法时,这尤其有用-
Task.Factory.fromsync
在这种情况下非常有用。事件驱动异步服务还应该公开一个使用
开始-结束

的接口。您是否尝试了异步处理程序?否,PKKG。不幸的是,我只在.NET4中使用vs2010。我正在调查Shaaman的建议。欢迎接受任何进一步的建议