2

目前我正在做一个涉及Window Workflow Foundation 4的页面导航控制的项目。我可以通过阻止UI线程直到WF线程返回url来实现这一点。

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

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

4

1 回答 1

0

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

我认为最简单的*方法是使用BackgroundWorker类(用法示例)。

其他选项包括使用 .NET 4.5 中可用的asyncawait关键字(如果您使用的是此版本的 dotNET)。如果您使用的是旧版本并且不想使用BackgroundWorker,您可以使用Task该类来创建后台任务。一个更原始的方法涉及使用和管理Thread实例(如果Task类不可用)。看到您正在使用 WF 4,一些较新的技术应该可以正常工作。;)

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

* - 最简单的意思是最容易开始!例如async/await更适合需要执行许多不同异步操作的应用程序,但是在您掌握一般多线程的窍门之前,这些操作并不是那么容易。

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

通过一些努力,您可以使用任务来创建工作的多线程应用程序,而无需创建意大利面条代码,这可能是一场真正的噩梦。当您在Begin-End服务中使用异步方法时,这特别有用 -Task.Factory.FromAsync在这种情况下真的很有帮助。事件驱动的异步服务还应该公开一个使用Begin-End.

于 2013-07-16T05:42:50.777 回答