使用任务中的阻塞?

4

我尝试在我的应用程序中使用任务,如下所示:

Task test;
test = Task.Factory.StartNew(() => general.Login(loginName, password));
MyTextBox.Text = "test text";

这个调用将由UI线程进行,我需要它被阻塞,直到工作线程从服务中返回,但是我不希望UI界面被冻结。

我可以使用ContinueWith,但这会使我的登录方法分离出来,这样更难跟踪。我还需要主UI线程运行此方法中的其余代码。

我该如何解决这个问题?


使用Async-CTP或等待C# 5。 - CodesInChaos
如果UI线程被阻塞,那么UI将会冻结。您是否想在等待任务完成时显示模态窗体? - Myles McDonnell
@CodeInChaos > 你能否提供更多关于这个问题的C# 5的信息? - Banshee
异步等待 C# 特性允许您以看起来像普通代码的方式编写基于继续的代码。要使用此功能,您需要使用异步 CTP 或 C# 5。只需查看 Jon 提供的网站即可。 - CodesInChaos
2个回答

8
这正是C# 5中的异步解决的问题。目前,你基本上需要拆分你的代码。这很痛苦,但这就是现实。(顺便说一下,你的描述有点不准确——你不想阻塞UI线程...你想要"在工作线程返回之前不执行你的逻辑的第二部分"。不完全相同 :) (你可能还想禁用UI的其他一些部分,但我们不能确定。)
值得提前了解异步特性-访问Visual Studio异步主页获取大量资源。

0

没有办法在不阻塞等待线程的情况下等待线程。你可以做的是类似于:

fire task
do some other task
wait for task  // hopefully the task finished by now

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接