欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > c# winform运行假死处理方案

c# winform运行假死处理方案

2025/5/16 0:03:43 来源:https://blog.csdn.net/lz576825608/article/details/147115441  浏览:    关键词:c# winform运行假死处理方案

对于.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。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词