c# - 线程 : Application Freezes after using Thread. 加入()

标签 c# .net multithreading .net-4.0

我知道 .Join() 会导致线程暂停并等待线程完成其工作,但是如何避免 UI 被卡住?这就是我的代码的样子”

Thread dataThread = new Thread(()=> data = getData(id));
dataThread.Start();
dataThread.Join();

Thread storingThread = new Thread(()=> storeData(data));
storingThread.Start();

我需要 Join,因为第一个线程返回一个包含需要通过第二个线程存储的数据的对象。但这会导致 UI 卡住。我怎样才能在后台线程中实现这些?你们认为我应该改变什么?

最佳答案

如果您使用的是 .Net framework >= 4.5,则可以使用 Tasks

await Task.Run(() => data = getData(id));
await Task.Run(() => storeData(data));

或者在一个命令中

await Task.Run(() => storeData(getData(id)));

如果你不必等到它完成你也可以这样做:

Task.Run(() => storeData(getData(id)));

关于c# - 线程 : Application Freezes after using Thread. 加入(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30276514/

相关文章:

.net - 我在哪里可以获得线程安全的 CollectionView?

c++ - C++线程连接会立即返回吗?

c# - 如何使 C# 类的 Object 属性可选?

c# - 离开页面时调用 Page_Load

c# - 将此事件处理程序注册从 C# 转换为 VB.net 的正确方法是什么?

.net - '系统::字符串 ^' to ' LPCWSTR'

c# - 从使用由 C++ MFC 应用程序调用的异步的 C# COM 组件显示模态窗口

swift - 结合 Realm 执行异步串行请求的问题

c# - EF 迁移无法删除迁移

c# - Moq - 是否可以在不使用 It.IsAny 的情况下设置模拟