启动并等待新线程而不会阻塞UI线程

时间:2020-08-29 10:00:15

标签: c# multithreading asynchronous join task

我有一个无法异步运行的方法。为了不阻止UI线程,我想打开一个新线程并在其中运行方法。但是,必须等待此线程才能根据该方法执行其他代码。无法异步运行的方法会转换文件,这需要花费一些时间,具体取决于文件的大小。但是我希望窗口保持可用状态,以便不会阻塞UI线程。我已经在互联网上进行搜索,但没有找到合适的内容。

1 个答案:

答案 0 :(得分:4)

async void button1_Click(....)
{
   label1.Text = "busy...";
   await Task.Run(() => { RunOldCode(); });
   label1.Text = "done.";   // safe to use the UI
}

请注意,async void仅应用于(简单的)事件处理程序。在大多数其他情况下,这是有问题的。