c#中子线程操作主线程中窗体上控件的方法 -凯发ag旗舰厅登录网址下载
凯发ag旗舰厅登录网址下载
收集整理的这篇文章主要介绍了
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
总结
以上是凯发ag旗舰厅登录网址下载为你收集整理的c#中子线程操作主线程中窗体上控件的方法的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得凯发ag旗舰厅登录网址下载网站内容还不错,欢迎将凯发ag旗舰厅登录网址下载推荐给好友。