多线程执行带参数和不带参数的方法
作者:月神 日期:2012-01-15
C#代码
- using System.Threading;
- namespace 多线程
- {
- public partial class FormThread : Form
- {
- public FormThread()
- {
- InitializeComponent();
- TextBox.CheckForIllegalCrossThreadCalls = false;//临时关闭微软错误检查
- }
- //单线程的缺点
- private void btnSingle_Click(object sender, EventArgs e)
- {
- CountTime();
- }
- /// <summary>
- /// 计数方法
- /// </summary>
- void CountTime()
- {
- DateTime beiginTime = DateTime.Now;
- for (int i = 0; i < 999999999; i++)
- {
- }
- TimeSpan ts = beiginTime.Subtract(DateTime.Now);
- MessageBox.Show("执行完毕" + ts.Milliseconds);
- }
- //多线程解决UI卡死
- private void btnNosingle_Click(object sender, EventArgs e)
- {
- //创建线程对象,传入线程要执行的方法
- //ThreadStart td = new ThreadStart(sayHello); ThreadStart表示在Thread上要执行的方法
- Thread thread = new Thread(CountTime);
- //将线程设置为后台线程,当所有的前台线程结束,后台线程自动退出,
- //前台线程:只有所有的前台线程都关闭才能完成程序的关闭
- thread.IsBackground = true;
- //启动线程 执行方法
- thread.Start();
- }
- /// <summary>
- /// 修改文本框的内容
- /// </summary>
- void increase()
- {
- for (int i = 0; i < 2000; i++)
- {
- int inc = int.Parse(txtInput.Text);
- Console.WriteLine(Thread.CurrentThread.Name + ",i=" + i);
- inc++;
- txtInput.Text = inc.ToString();
- }
- }
- //多线程方法重入问题
- private void btnMethods_Click(object sender, EventArgs e)
- {
- ThreadStart tds = new ThreadStart(increase); //返回委托类型,表示在线程上执行的方法
- Thread thd = new Thread(tds);
- thd.Name = "t1";
- thd.IsBackground = true;
- thd.Start();
- Thread thd2 = new Thread(increase);
- thd2.Name = "t2";
- thd2.IsBackground = true;
- thd2.Start();
- }
- /// <summary>
- /// 带参数的方法
- /// </summary>
- void GetTxtName(object name)
- {
- MessageBox.Show("name="+name);
- }
- //线程执行带参数的方法
- private void btnParameters_Click(object sender, EventArgs e)
- {
- ParameterizedThreadStart phs = new ParameterizedThreadStart(GetTxtName);
- Thread thdParameters = new Thread(phs);
- thdParameters.IsBackground = true;
- thdParameters.Start(txtName.Text);
- }
- /*----------------------------------------------------------------------
- * 总结:线程必须要传入执行的方法,可以是带参数和不带参数两类
- * 线程执行不带参数的方法使用ThreadStart
- * 线程执行带参数的方法使用ParameterizedTheadStart
- * 线程都是使用委托传入方法
- -----------------------------------------------------------------------*/
- }
- }
线程执行带多个参数的方法请参考:www.zhuzhiyong.com.cn/article/zzy_wf/316.htm
评论: 0 | 引用: 0 | 查看次数: -
发表评论
上一篇
下一篇

文章来自:
Tags:
相关日志: