【问题标题】:Blocking with Task?用任务阻塞?
【发布时间】:2012-01-16 16:32:21
【问题描述】:

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

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

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

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

我该如何解决这个问题?

【问题讨论】:

  • 使用 Async-CTP 或等待 C# 5。
  • 如果 UI 线程阻塞,则 UI 冻结。是否要在等待任务完成时显示模态表单?
  • @CodeInChaos > 能否请您提供有关 C# 5 的更多信息?
  • async-await C# 功能允许您以看起来像普通代码的方式编写基于延续的代码。要获得此功能,您需要异步 CTP 或 C# 5。只需查看 Jon 链接的网站。

标签: c# .net parallel-processing task async-ctp


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-21
      • 2021-08-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多