如何在一个新线程中调用一个长方法来保持UI在C#中运行

本文关键字:一个 运行 UI 方法 线程 新线程 调用 | 更新日期: 2023-09-27 17:58:27

我有一个WPF应用程序,它有一个装满用户的组合框,一个显示所选用户的一些数据的网格,以及一个调用DoTimeSheetReport()的按钮。

DoTimeSheetReport()做了一些工作,然后打开一个带有SSRS报告的新窗口。一切都很好,但该方法需要很长时间才能完成,主要是因为报告,这意味着我的UI变得没有响应。我尝试了几种方法来启动一个新的线程/任务,但都阻塞了UI的线程。我可能做错了什么,但我不知道。

为了不阻塞UI,调用长方法的最佳方法是什么?

编辑

我更改了代码以隔离耗时的部分。

reportViewer.SetPageSettings(reportConfiguration.PageSettings);

在这一部分使用了后台工作人员。谢谢你的帮助。

@LuisQuijada:成功了,发布一个答案,这样我就可以接受了。

如何在一个新线程中调用一个长方法来保持UI在C#中运行

using System.Threading;
new Thread(() => 
{
    Thread.CurrentThread.IsBackground = true; 
    /* run your code here */ 
    Console.WriteLine("Hello, world"); 
}).Start();

简而言之:您需要做的是了解如何使用异步调用

作为一个起点,你可以看看你的文章和/或MSDN文章中的建议链接:

  • 异步调用同步方法
  • Dispatcher.BeginInvoke方法(DispatcherPriority,Delegate)