注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

神殿天堂

神仙的家园

 
 
 

日志

 
 

C#如何使用多线程  

2013-07-31 16:52:00|  分类: c# |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

本人最近需要操作多线程,但是在C#中有一个问题,线程中操作主线程中的控件就会提示错误,或者操作有问题,为此可以使用委托代理的方法,以下是本人借鉴网上的内容自己编写的例子:(在解说之后附带程序代码)

上图为软件控件界面,ListView控件中在Columns可以添加列信息,但是为了得到上面的效果,需要将ListView控件中的View属相设置成Details

使用多线程需要引用System.Threading

此外,为了在不同的方法之间传递数据信息,可以设置全局变量:

public Thread thread = null;
public int iNo = 0;
public string strNo = null;

楼主发现,如果项目中包含多个界面,在界面之间传递数据的最好办法是添加类,在类中申请变量,本项目添加一个类CCValue,并在CCValue中定义变量

public static bool thStop = false;//申请bool型变量控制线程启停

开启按钮代码:

        private void button1_Click(object sender, EventArgs e)
        {
            thread = new Thread(new ThreadStart(Dowork));
            thread.Start();
        }

退出按钮代码:(本按钮只是退出线程,并不是退出窗口)

        private void button3_Click(object sender, EventArgs e)
        {
            CCValue.thStop = true;
            thread.Join(1);
        }

Hello按钮代码:(本按钮主要是为了测试是否真正的实现了多线程)

        private void button2_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Hello");
        }

多线程操作代码:

        public delegate void MyInvoke(string str1, string str2);

        public void Dowork()
        {
            while (!CCValue.thStop)
            {
                if (CCValue.thStop)
                {
                    break;
                }
                else
                {
                    strNo = iNo.ToString().Trim();
                    MyInvoke mi = new MyInvoke(UpdateForm);
                    this.BeginInvoke(mi, new object[] { "我是文本框", strNo });//注意此处的new object[] { "我是文本框", strNo }与下面的

                                                                                                                      //UpdateForm(string param1,string param2)是变量对应的,

                                                                                                                      //也即是向方法UpdateForm(string param1,string param2)

                                                                                                                      //传送数据
                    Thread.Sleep(1000);
                    iNo++;
                }
            }
        }
        public void UpdateForm(string param1,string param2)
        {
            this.textBox1.Text = param1 + param2;
            ListViewItem item = new ListViewItem(param1);
            item.SubItems.Add(param2);
            listView1.Items.Add(item);

        }

以上操作结束以后大家一下就会已经实现了多线程。


  评论这张
 
阅读(0)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018