我尝试在我的应用程序中使用这样的任务:
Task test;
test = Task.Factory.StartNew(() => general.Login(loginName, password));
MyTextBox.Text = "test text";
这将是进行此调用的UI线程,我需要阻止它直到工作线程从服务返回,但我不希望UI冻结。
我可以使用ContinueWith,但这会分裂我的登录方法,这使得它更难以遵循。我还需要主UI线程来运行此方法中的其余代码。
我该如何解决这个问题?
答案 0 :(得分:8)
这正是C#5中异步解决的问题。目前,您基本上必须拆分代码。这是一种痛苦,但事实就是如此。 (顺便说一句,你的描述稍微偏离了 - 你不想要阻止UI线程......你想要“不执行逻辑的第二部分”,直到工作线程返回。不完全相同:)(您可能还想禁用UI的其他部分,但我们无法确定。)
值得深入了解异步功能 - 请参阅Visual Studio async home page了解大量资源。
答案 1 :(得分:0)
没有阻止等待线程就无法等待线程。你可以做的是:
fire task
do some other task
wait for task // hopefully the task finished by now