如何在一个新线程中调用一个长方法来保持UI在C#中运行
本文关键字:一个 运行 UI 方法 线程 新线程 调用 | 更新日期: 2023-09-27 17:58:27
我有一个WPF应用程序,它有一个装满用户的组合框,一个显示所选用户的一些数据的网格,以及一个调用DoTimeSheetReport()的按钮。
DoTimeSheetReport()做了一些工作,然后打开一个带有SSRS报告的新窗口。一切都很好,但该方法需要很长时间才能完成,主要是因为报告,这意味着我的UI变得没有响应。我尝试了几种方法来启动一个新的线程/任务,但都阻塞了UI的线程。我可能做错了什么,但我不知道。
为了不阻塞UI,调用长方法的最佳方法是什么?
编辑
我更改了代码以隔离耗时的部分。
reportViewer.SetPageSettings(reportConfiguration.PageSettings);
在这一部分使用了后台工作人员。谢谢你的帮助。
@LuisQuijada:成功了,发布一个答案,这样我就可以接受了。
using System.Threading;
new Thread(() =>
{
Thread.CurrentThread.IsBackground = true;
/* run your code here */
Console.WriteLine("Hello, world");
}).Start();
简而言之:您需要做的是了解如何使用异步调用。
作为一个起点,你可以看看你的文章和/或MSDN文章中的建议链接:
- 异步调用同步方法
- Dispatcher.BeginInvoke方法(DispatcherPriority,Delegate)