.net学习之多线程的学习
来源:互联网 发布:移动手机信号测试软件 编辑:程序博客网 时间:2024/06/16 06:34
在c#中要使用多线程需要引入 system.Threading命名空间
一个进程中可有若干个线程,从而可以在“同一时间”内可以几件事情一起做--即并发执行,其实是时间片的轮转。
单线程有很多时候无法满足程序的功能,例如要进行一个很长时间的计算,在计算的过程中UI进程会“卡死”,直到计算完毕
才能恢复正常。
实例代码如下:
private void button1_Click(object sender, EventArgs e)
{
count();
}
private void count()
{
for (int i = 0; i < 1000000000;i++ )
{
}
MessageBox.Show("循环完毕");
}
private void button2_Click(object sender, EventArgs e)
{
Thread thread = new Thread(count);
thread.Start();
}
线程分为前台线程和后台线程,如果不做特殊的书名,c#默认产生前台进程,这样当主界面关闭后
前台线程依然在进行(c#产生的线程是系统线程),如果要设为后台线程只需要设置设置一个Thread的
IsBackgroud属性为true即可。
线程重入问题
代码如下:
FormLoad的时候设置TextBox.CheckForIllegalCrossThreadCalls = false,才能在其他线程使用UI进程中的textbox
void ChangeText()
{
int i=Convert.ToInt32(textBox.Text);
for (int j = 0; i < 10000;j++ )
{
i++;
textBox.Text = i.ToString();
Console.WriteLine("线程名: "+Thread.CurrentThread.Name+" i的值="+i.ToString());
}
}
private void button3_Click(object sender, EventArgs e)
{
textBox.Text = "0";
Thread thread1 = new Thread(ChangeText);
thread1.Name = "FirstThread";
thread1.IsBackground = true;
thread1.Start();
Thread thread2 = new Thread(ChangeText);
thread2.Name = "SecondThread";
thread2.IsBackground = true;
thread2.Start();
}
结果如下:
、
、
、
线程名: SecondThread i的值=9991
线程名: FirstThread i的值=9994
线程名: SecondThread i的值=9992
线程名: FirstThread i的值=9995
线程名: SecondThread i的值=9993
线程名: FirstThread i的值=9996
线程名: SecondThread i的值=9994
线程名: FirstThread i的值=9997
线程名: SecondThread i的值=9995
线程名: FirstThread i的值=9998
线程名: SecondThread i的值=9996
线程名: SecondThread i的值=9997
线程名: FirstThread i的值=9999
线程名: FirstThread i的值=10000
线程名: SecondThread i的值=9998
线程名: SecondThread i的值=9999
线程名: SecondThread i的值=10000
线程间跳转的时候取到i的值,但未自增就条转到其他线程造成的现象。
带参数的线程
当创建线程的时候构造一个带有参数的线程,
在线程Start的时候传入参数即可。
Thread.Start(object o)参数为Object所以可以传入任何类型的参数。
结束进程的方法thread.abort();
线程暂停一段时间thread.sleep(time);
学习多线程是从传智播客的网站上下载的视频教程,传智播客作为一个培训公司,免费放出了很多java 。net方面的视频,想要自学的朋友可以去下载看看,感觉
他们的教程很是不错,自学的视频基本都是从那里下载的,这里也算是给他们做下广告表示我的谢意。
- .net学习之多线程的学习
- Java学习之多线程
- Java学习之多线程
- 学习笔记之多线程
- 学习知识之多线程
- MFC之多线程学习
- java学习之多线程
- iOS学习之多线程
- Java学习之多线程
- Python之多线程学习
- JAVA学习之多线程
- Java学习之多线程
- Android学习之多线程
- Java学习之多线程
- 学习日记之多线程
- 多线程学习之多线程的控制
- Java学习之多线程--创建线程的三种方式
- iOS学习总结之多线程编程(NSThread)-线程的状态
- log4j 集合框架小记~
- 检测sqlserver2005性能瓶颈
- 内核中的TCP的追踪分析-7-TCP(IPV4)的socket接收连接
- 内核中的TCP的追踪分析-8-TCP(IPV4)的socket连接
- 学习国际化资源配置1.
- .net学习之多线程的学习
- Web编辑器
- ASP.NET中常用的文件上传下载方法
- 实现CString到std::string的转换
- C# 视频监控系列(3):客户端——连接服务器并预览
- 23种设计模式(8):观察者模式
- usaco 3.3 Riding the Fences
- 32位操作系统内存大小识别
- Extjs4中xytpe与对应的类