日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

WinForm中 事件 委托 多线程的应用【以一个下载进度条为例】

發(fā)布時(shí)間:2025/3/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WinForm中 事件 委托 多线程的应用【以一个下载进度条为例】 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

第一步:首先我們創(chuàng)建一個(gè)winfor的項(xiàng)目

第二步:我們建一個(gè)窗體
在一個(gè)窗體里面 打開(kāi)一個(gè)另外的窗體 另外的窗體有一個(gè)按鈕 點(diǎn)擊后就開(kāi)始下載 下載完成后 在注冊(cè)窗體上面 顯示下載完成(達(dá)到在一個(gè)窗體里面修改另外的一個(gè)窗體)

private void button1_Click(object sender, EventArgs e){FormLoad fl = new FormLoad();fl.Show();}

?第三步:完成下載窗體的進(jìn)度條

private void button1_Click(object sender, EventArgs e){for (int i = 0; i <= 100; i++){this.progressBar1.Value = i;System.Threading.Thread.Sleep(300);}}

第四步:處理窗體假死問(wèn)題
(用到多線程和委托)

public partial class FormLoad : Form{public FormLoad(){InitializeComponent();//為這個(gè)委托變量賦值changeProgerss = FunChangeProgress;}public void FunChangeProgress(int value){this.progressBar1.Value = value;}private void button1_Click(object sender, EventArgs e){//創(chuàng)建一個(gè)線程System.Threading.Thread thr = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(Download));thr.Start(100);}//線程方法 一定要是obje 類型參數(shù) 同時(shí)返回值是voidprivate void Download(object obj){for (int i = 0; i <= 100; i++){//執(zhí)行委托 changeProgerss(i);System.Threading.Thread.Sleep(300);}}//在下載窗體上面 建一個(gè)委托public delegate void ChangeProgress(int value);//創(chuàng)建上面的委托的變量public ChangeProgress changeProgerss;}

第五步:處理跨線程調(diào)用ui
線程間操作無(wú)效: 從不是創(chuàng)建控件“progressBar1”的線程訪問(wèn)它。

for (int i = 0; i <= 100; i++){//執(zhí)行委托this.progressBar1.Invoke(changeProgerss, i);//changeProgerss(i);System.Threading.Thread.Sleep(300);}

?

第六步 主窗體添加委托 解決跨線程調(diào)用UI

public FormMain(){InitializeComponent();sif = ShowInfoFun;}public void ShowInfoFun(string text){this.label1.Text = text;}private void button1_Click(object sender, EventArgs e){FormLoad fl = new FormLoad();//在主窗體中注冊(cè)子窗體的事件fl.eventShowInfo += new FormLoad.ShowInfo(fl_eventShowInfo);fl.Show();}//事件的執(zhí)行方法void fl_eventShowInfo(string text){this.label1.Invoke(sif, text);}//在主窗體這里 創(chuàng)建一個(gè)委托public delegate void ShowInfo(string text);public ShowInfo sif;}

視頻下載地址:http://pan.baidu.com/share/link?shareid=1740683788&uk=540184145

需要源碼的可以到這里向樓主要:http://www.bamn.cn/redirect.php?tid=19&goto=lastpost#lastpost

轉(zhuǎn)載于:https://www.cnblogs.com/maijin/p/3246238.html

總結(jié)

以上是生活随笔為你收集整理的WinForm中 事件 委托 多线程的应用【以一个下载进度条为例】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。