2011-12-09 92 views
3

我尝试使用任务在我的应用程序是这样的:阻止与任务?

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

这将是UI线程,使这个电话,我需要它被阻塞,直到从服务的工作线程的回报,但我不希望UI冻结。

我可以使用ContinueWith,但这会拆分我的登录方法,这使得难以遵循。我还需要主UI线程来运行此方法中的其余代码。

我该如何解决这个问题?

+0

使用异步CTP或等待C#5 – CodesInChaos

+0

如果UI线程块则UI冻结。您是否想在等待任务完成时显示模态表单? –

+0

@CodeInChaos>你能否请求提供一些关于C#5关于这个问题的更多信息? – Banshee

回答

8

这正是C#5中异步解决的问题。目前,你基本上必须拆分你的代码。这是一种痛苦,但事实就是这样。 (顺便说一下,你的描述有些偏离 - 你不需要想阻塞UI线程......你希望“不要执行你的逻辑的第二部分”,直到工作线程返回为止。 :)(您可能还想禁用其他一些用户界面,但我们无法确定)

值得在异步功能方面领先一步 - 请参阅Visual Studio async home page了解大量资源。

0

没有阻塞等待线程的等待线程是没有办法的。你可以做的是一样的东西:

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