博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用BackgroundWorker解决窗口卡死
阅读量:6758 次
发布时间:2019-06-26

本文共 934 字,大约阅读时间需要 3 分钟。

使用控件 BackgroundWorker 的实质是为该进程新创建一个线程来执行耗时操作。

bool changed = false;private void tabControl1_Selected(object sender, TabControlEventArgs e){    changed = true;    if (!backgroundWorker1.IsBusy)    {        if (changed)        {            backgroundWorker1.RunWorkerAsync();        }    }}private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e){    // time-consuming operations    int sum = 0;    for (int i = 0; i < int.MaxValue; i++)    {        sum += i;    }    textBox1.Text = sum.ToString();    // time-consuming operations    changed = false;}

与直接创建一个线程相比,BackgroundWorker 不需要忽视控件多线程的安全机制,详见

还可以使用 BackgroundWorker 异步创建新的窗口:

private void Open_Click(object sender, EventArgs e){    this.backgroundWorker1.RunWorkerAsync();}private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e){    ExternalForm ef = new ExternalForm();    ef.ShowDialog();}

转载于:https://www.cnblogs.com/jizhiqiliao/p/9951079.html

你可能感兴趣的文章
我的Android进阶之旅------&gt;怎样解决Android 5.0中出现的警告: Service Intent must be explicit:...
查看>>
单点登录实现机制:桌面sso
查看>>
JVM垃圾回收机制
查看>>
Oracle导出导入指定表
查看>>
訪问者模式的分析、结构图及基本代码
查看>>
Android Studio 2.3.3 添加ksoap2的引用(拒绝网上其他的忽悠),也适用于添加其他Jar的引用...
查看>>
sql改写or 改成union不等价数据变多
查看>>
How to skip to next iteration in jQuery.each() util?
查看>>
Android 音视频开发(一) : 通过三种方式绘制图片
查看>>
spring-data-jpa+hibernate 各种缓存的配置演示
查看>>
EmguCV(OpenCV)实现高效显示视频(YUV)叠加包括汉字
查看>>
oracle之 oracle database vault(数据库保险库)
查看>>
linux 条件测试 ******
查看>>
第一次使用Android Studio时你应该知道的一切配置(三):gradle项目构建
查看>>
Expert 诊断优化系列------------------语句调优三板斧
查看>>
怎样使用下载的bootstrap模板?
查看>>
P1636 Einstein学画画
查看>>
TCP/IP 协议簇 端口 三次握手 四次挥手 11种状态集
查看>>
java正则表达式:验证字符串数字
查看>>
Linux中最常用的JAVA_HOME配置
查看>>