博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c# winform 使用分线程防止按鈕點擊執行代碼頁面假死
阅读量:4042 次
发布时间:2019-05-24

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

假如winform頁面上 有兩個按鈕,Button1 ,Button2, Button2的執行時間需要N秒,點擊Button2時會導致期間整個頁面無法移動,包括Button1無法點擊等,即頁面處於假死狀態。 例如 Button2的代码如下:

`

private void butto2_Click(object sender, EventArgs e)        {
doSth();//執行時間長的事件 } ///button2執行的事件 private string doSth() {
for (int i = 0; i < 10; i++) {
//下面用 Sleep代替要執行的代碼,,,,表示執行時間比較久 Thread.Sleep(1000); } return "執行完成了"; }

`

这时點擊Butto2會出現頁面假死。原因及解决方法如下:

原因:我们知道winform中control的事件默認是由主線程 UI执行,Button2的事件由於執行時間長導致UI線程阻塞,造成頁面假死沒反應。

解決方法:可以用多線程,即在Button2代碼中采用子線程去調用執行時間久的事件

代碼改為:

private void butto2_Click(object sender, EventArgs e)        {
//1.用 Thread類 doSth 不帶參數 //Thread thr = new Thread(new ThreadStart(doSth)); //thr.Start(); //doSth 帶參數 //Thread thr = new Thread(new ParameterizedThreadStart(doSth)); //thr.Start(對像參數); //2.或者用 Task ,需要高版本 framework支持 Task
t = Task.Factory.StartNew(() => {
return doSth(); }); //線程執行返回的值 //t.GetAwaiter().OnCompleted(() => // {
// label1.Text = t.Result; // }); }

转载地址:http://inmdi.baihongyu.com/

你可能感兴趣的文章
一、windows安装Tomcat
查看>>
2012年02月21日的日记
查看>>
iSecret&nbsp;简介
查看>>
iSecret&nbsp;1.0&nbsp;正式上线啦!
查看>>
iSecret&nbsp;1.0&nbsp;销量尚可&nbsp;希望大家多…
查看>>
获取当前的内存占用&nbsp;(纯Linux底层…
查看>>
UIView的深入研究《转》
查看>>
29句最常用的英语谚语——管理…
查看>>
iSecret&nbsp;用户反馈专用
查看>>
NSDateComponents&nbsp;的基本使用以及…
查看>>
我的处女贴:&nbsp;UITableView&nbsp;reloadDa…
查看>>
Operation&nbsp;Queue(Obj-C中并发的…
查看>>
iOS&nbsp;开发资源汇总《转》
查看>>
iOS&nbsp;push&nbsp;相关知识备忘
查看>>
Mysql导入导出.sql文件《转》
查看>>
Mysql&nbsp;for&nbsp;MacOSX&nbsp;安装和基本操作
查看>>
MAC&nbsp;系统的启动过程和系统启动时运…
查看>>
svn&nbsp;常用命令《转》
查看>>
Linux中的环境设置PATH与exp…
查看>>
Improved&nbsp;logging&nbsp;in&nbsp;Objective-C&nbsp;…
查看>>