c# winform运行假死处理方案

发布于:2025-04-11 ⋅ 阅读:(71) ⋅ 点赞:(0)

对于.net架构下,使用c#创建的winform应用程序,在操作在长时间运行时会导致用户界面 (UI) 处于停止响应状态,用户在这操作期间无法进行其他的操作,造成非常差的用户体验,为了不使UI层处于停止响应状态,则可以使用 BackgroundWorker 类方便地解决这类问题。这个后台的线程处理,可以很好的实现常规操作的同时,还可以及时通知UI当前处理信息的进度等。

1.BackgroundWorker

BackgroundWorker是.NET Framework 里用来执行多线程任务的控件,它允许开发人员在一个单独的线程上执行一些操作。耗时的操作(如下载和数据库事务)在长时间运行时可能会导致用户界面 (UI) 似乎处于停止响应状态。 如果您需要能进行响应的用户界面,而且面临与这类操作相关的长时间延迟,则可以使用 BackgroundWorker 类方便地解决问题。

2.BackgroundWorker的使用方法

这里对于BackgroundWorker的属性、方法等不在赘述,详情可参考C#之BackgroundWorker从简单入门到深入精通的用法总结 - Dsw - 博客园

这里只针对BackgroundWorker的运行机制呈现以下个人的理解

(1)在winform中添加BackgroundWorker组件,其有三个方法:

DoWork :执行什么操作;

private void bgWorker_DoWork(object sender, DoWorkEventArgs e)
{
    BackgroundWorker worker = sender as BackgroundWorker;
    
    for (int i = 1; i <= 100; i++)
    {
        if (worker.CancellationPending) // 检查是否收到取消请求
        {
            e.Cancel = true;
            break;
        }
        else
        {
            // 执行耗时操作
            var result = PerformSomeLongRunningOperation(i);
 这里添加您的处理过程-----
            // 如果允许报告进度,则报告当前进度
            worker.ReportProgress(i, result);
            // 可能需要在此处模拟延迟,例如 Thread.Sleep(100);
        }
    }

ProgressChanged:类似于监听每一个执行过程;

RunWorkerCompleted:执行结束的响应。

以上三个方法执行过程不详细介绍,这里需要明确的是,在处理数据处理时,将处理过程放在DoWork方法的定义中,
 2.运行BackgroundWorker

backgroundWorker.RunWorkerAsync(); 通过RunWorkerAsync()方法唤醒DoWork。


网站公告

今日签到

点亮在社区的每一天
去签到