[C#.NET] 如何 使用 多執行緒 Thread / 跨執行緒 存取UI
来源:互联网 发布:手机上视频录像软件 编辑:程序博客网 时间:2024/05/29 17:21
http://www.dotblogs.com.tw/yc421206/archive/2009/02/13/7141.aspx
System.Threading 命名空間提供了執行緒的建立,讓開發者省去了不少程式碼。
使用多執行緒時先匯入System.Threading
如何建立執行緒
1.建立一個方法
private void RunSample01(){ Console.WriteLine("執行緒:{0}",Thread.CurrentThread.ManagedThreadId);}
2.建立ThreadStart委派,它是用來表示在執行緒上執行的方法。
ThreadStart myRun = new ThreadStart(RunSample01);
3.建立Thread 類別,它是用來建立和控制執行緒,設定執行緒的優先權,並取得它的狀態。
Thread myThread = new Thread(myRun);
4.啟動執行緒
myThread.Start();
如何建立多重執行緒
private void button2_Click(object sender, EventArgs e)
{
//1.建立ThreadStart委派
ThreadStart myRun = new ThreadStart(RunSample01);
for (int i = 0; i < 6; i++)
{
try
{
//2.建立Thread 類別
Thread myThread = new Thread(myRun);
//3.啟動執行緒
myThread.Start();
}
catch (Exception)
{
//例外發生則終止迴圈執行
break;
}
}
}
如何傳遞參數給多執行緒
ThreadStart委派沒有傳遞參數的功能,在實際應用上我們常需要傳遞參數,這時就要改用ParameterizedThreadStart 委派。ParameterizedThreadStart 委派用法與ThreadStart委派大同小異,只是多了參數傳遞機制。
private void button3_Click(object sender, EventArgs e){//1.建立ParameterizedThreadStart委派ParameterizedThreadStart myPar = new ParameterizedThreadStart(RunSample02);//2.建立Thread 類別Thread myThread01 = new Thread(myPar);Thread myThread02 = new Thread(myPar);//3.啟動執行緒並帶入參數myThread01.Start("我是多執行緒第一號");myThread02.Start("我是多執行緒第二號");}
private void RunSample02(object o){string myStr = o as string;//string myStr = (string)o;if (myStr == null){myStr = (string)o;}else{for (int i = 0; i < 6; i++){Console.WriteLine("{0}:{1}", myStr, Thread.CurrentThread.ManagedThreadId);Thread.Sleep(1000);}}}
如何跨執行緒存取UI
當我試著用WinFrom寫多執行緒時,卻出現了以下錯誤訊息
跨執行緒作業無效: 存取控制項 'textBox1' 時所使用的執行緒與建立控制項的執行緒不同。
詢問高手後有三種方法解決:
1.Form.CheckForIllegalCrossThreadCalls = False
2.建立委派
3.使用BackgroundWorker
第一種方法,據說不安全,但我也不曉得哪裡不安全,但用起來還蠻方便的。
第二種方法,比較正統使用委派的方式,若爾後需要改任何控制項的文字時(需有text屬性的),呼叫 myU即可。
private delegate void myUICallBack(string myStr, Control ctl);
private void myUI(string myStr, Control ctl)
{
if (this.InvokeRequired)
{
myUICallBack myUpdate = new myUICallBack(myUI);
this.Invoke(myUpdate, myStr, ctl);
}
else
{
ctl.Text = myStr;
}
}
- [C#.NET] 如何 使用 多執行緒 Thread / 跨執行緒 存取UI
- [C#.NET] 如何 使用 BackgroundWorker 多執行緒 / 跨執行緒 存取UI
- .NET : 如何使用Base 64存取图片
- ASP.Net数据库如何存取图片
- ASP.Net数据库如何存取图片
- ASP.Net数据库如何存取图片
- 使用asp.net和C#如何存取Sql Server2000中的Image(16)类型的字段?
- C#Thread的使用
- 08 Android 使用Thread操作UI
- 使用Thread+Handler或runOnUiThread更新UI
- ui thread
- UI Thread
- 使用Thread+Handler实现非UI线程更新UI界面
- 使用Thread+Handler实现非UI线程更新UI界面
- 使用Thread+Handler实现非UI线程更新UI界面
- 使用Thread+Handler实现非UI线程更新UI界面
- 使用Thread+Handler实现非UI线程更新UI界面
- Main Thread & UI Thread
- 什么是psu
- Spring--quartz中cronExpression配置说明
- 读取容器配置参数---context-param和init-param区别
- GPU加速技术揭秘
- PL/SQL的BOOLEAN的三个值:TRUE,FALSE,NULL
- [C#.NET] 如何 使用 多執行緒 Thread / 跨執行緒 存取UI
- HDU1397(以空间换取时间)
- 如何分配内存 内存碎片处理技术
- cmd 右鍵 解除svn
- 雷神的微软平台安全宝典
- 负数转换成二进制数
- HTML5多媒体开发指南
- JavaScript宝典(第7版)
- ucos函数简析