欢迎访问 生活随笔!

凯发k8官方网

当前位置: 凯发k8官方网 > 编程语言 > c# >内容正文

c#

c#中子线程操作主线程中窗体上控件的方法 -凯发k8官方网

发布时间:2024/10/12 c# 22 豆豆
凯发k8官方网 收集整理的这篇文章主要介绍了 c#中子线程操作主线程中窗体上控件的方法 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

demo

this.listview1.visible = true;this.listview1.beginupdate();this.listview1.endupdate(); //结束数据处理,ui界面一次性绘制

 

using system; using system.collections.generic; using system.windows.forms;using system.threading;namespace 子线程操作主线程窗体上的控件 {public partial class frmmain : form{/***************************************************** 定义该类的私有成员 ****************************************************//// /// 定义一个队列,用于记录用户创建的线程/// 以便在窗体关闭的时候关闭所有用于创建的线程/// private list chaosthreadlist;/***************************************************** 该类的初始化相关函数 ****************************************************//// /// 窗体的初始化函数,初始化线程队列chaosthreadlist/// public frmmain(){initializecomponent();chaosthreadlist = new list();}/// /// 窗体的关闭事件处理函数,在该事件中将之前创建的线程全部终止/// /// /// private void frmmain_formclosed(object sender, formclosedeventargs e){if (chaosthreadlist.count > 0){//编列自定义队列,将所有线程终止foreach (thread tworkingthread in chaosthreadlist){tworkingthread.abort();}}} /***************************************************** 定义该类的自定义函数 ****************************************************//// /// 定义一个代理/// /// /// private delegate void dispmsgdelegate(int index,string msg);/// /// 定义一个函数,用于向窗体上的listview控件添加内容/// /// /// private void dispmsg(int iindex,string strmsg){if (this.lstmain.invokerequired==false) //如果调用该函数的线程和控件lstmain位于同一个线程内 {//直接将内容添加到窗体的控件上listviewitem lvi = new listviewitem();lvi.subitems[0].text = iindex.tostring();lvi.subitems.add(strmsg);this.lstmain.items.insert(0, lvi);}else //如果调用该函数的线程和控件lstmain不在同一个线程 {//通过使用invoke的方法,让子线程告诉窗体线程来完成相应的控件操作dispmsgdelegate dmsgd = new dispmsgdelegate(dispmsg);//使用控件lstmain的invoke方法执行dmsgd代理(其类型是dispmsgdelegate)this.lstmain.invoke(dmsgd, iindex, strmsg);}}/// /// 定义一个线程函数,用于循环向列表中添加数据/// private void thread_displaymsg(){for (int i = 0; i < 10000; i ){dispmsg(i 1, "welcome you : " (i 1).tostring());thread.sleep(10);}}/***************************************************** 定义该类的事件处理函数 ****************************************************//// /// 【开始】按钮的单击事件处理函数,新建一个线程向窗体上的listview控件填写内容/// /// /// private void btnbegin_click(object sender, eventargs e){//创建一个新的线程thread tworkingthread = new thread(thread_displaymsg);//将新建的线程加入到自定义线程队列中,以便在窗体结束时关闭所有的线程 chaosthreadlist.add(tworkingthread);//开启线程 tworkingthread.start();} } }

 

转载于:https://www.cnblogs.com/test404/p/6715118.html

总结

以上是凯发k8官方网为你收集整理的c#中子线程操作主线程中窗体上控件的方法的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得凯发k8官方网网站内容还不错,欢迎将凯发k8官方网推荐给好友。

网站地图