4

我尝试在我的应用程序中使用这样的任务:

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

它将是进行此调用的 UI 线程,我需要阻止它,直到工作线程从服务返回,但我不希望 UI 冻结。

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

我该如何解决这个问题?

4

2 回答 2

8

这正是 C# 5 中的 async 解决的问题。目前,您基本上必须拆分代码。这是一种痛苦,但就是这样。(顺便说一下,你的描述有点不对劲——你不想阻塞 UI 线程......你想在工作线程返回之前“不执行逻辑的第二部分”。不完全一样:) (您可能还想禁用 UI 的其他部分,但我们无法确定。)

在异步功能上抢先一步是值得的 - 请参阅Visual Studio 异步主页以获取大量资源。

于 2011-12-09T11:06:27.530 回答
0

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

fire task
do some other task
wait for task  // hopefully the task finished by now
于 2011-12-09T11:08:38.843 回答