【zz】.Net2.0 的新线程 ParameterizedThreadStart &BackgroundWorker
2008-03-01 15:24
246 查看
如果你想为一个线程传入变量你怎么办?
ThreadStart可不支持带参数的方法.所以你无法使用Thread来启动一个带参数的方法..
不过在.Net1.0下,你可以通过Delegate的异步调用来实现
http://www.cnblogs.com/idior/articles/100666.html
现在在.Net2.0下提供了ParameterizedThreadStart 这么一个Delegate.它和ThreadStart 的不同就在于可以拥有一个object类型的参数.也就是说你可以通过它来使用Thread类以启动一个线程并传入参数, 和Java很象了,不错的新功能.
还有一个新增的类BackgroundWorker,可以用于启动后台线程,并在后台计算结束后及时调用主线程的方法.一个常见的应用就是在DataGrid中载入数据的时候.因为从数据库中载入DataSet比较耗时, 所以你可以使用BackgroundWorker来进行载入, 当DataSet构造好后就立即绑定上DataGrid. 其实该功能同样可以通过Delegate的异步调用实现不过BackgroundWorker用起来更方便一些.
ThreadStart可不支持带参数的方法.所以你无法使用Thread来启动一个带参数的方法..
ThreadStart myThreadDelegate = new ThreadStart(ThreadMethod); //public delegate void ThreadStart(); u can't pass a Parameter Thread myThread = new Thread(myThreadDelegate); myThread.Start(); //myThread.Start(o); Wrong!
不过在.Net1.0下,你可以通过Delegate的异步调用来实现
http://www.cnblogs.com/idior/articles/100666.html
现在在.Net2.0下提供了ParameterizedThreadStart 这么一个Delegate.它和ThreadStart 的不同就在于可以拥有一个object类型的参数.也就是说你可以通过它来使用Thread类以启动一个线程并传入参数, 和Java很象了,不错的新功能.
using System; using System.Threading; namespace ParameterizedThreadStartTest { class Program { static void Main(string[] args) { ParameterizedThreadStart myParameterizedThreadDelegate = new ParameterizedThreadStart(ThreadMethod); Thread myThread = new Thread(myParameterizedThreadDelegate); object o = "hello"; myThread.Start(o); } private static void ThreadMethod(object o) { string str = o as string; Console.WriteLine(str); } } }
还有一个新增的类BackgroundWorker,可以用于启动后台线程,并在后台计算结束后及时调用主线程的方法.一个常见的应用就是在DataGrid中载入数据的时候.因为从数据库中载入DataSet比较耗时, 所以你可以使用BackgroundWorker来进行载入, 当DataSet构造好后就立即绑定上DataGrid. 其实该功能同样可以通过Delegate的异步调用实现不过BackgroundWorker用起来更方便一些.
//1. Instantiate a BackgroundWorker instance: BackgroundWorker myDataWorker = new BackgroundWorker(); //2. Setup a DoWork delegate that does the work that you want to be done on the background thread. myDataWorker.DoWork += new DoWorkEventHandler(delegate(object o, DoWorkEventArgs workerEventArgs) { workerEventArgs.Result = new XXXDAL().GetData(); } ); //3. Setup a RunWorkerCompleted delegate that handles updating your UI with the data recieved on the background thread. myDataWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(delegate(object o, RunWorkerCompletedEventArgs workerEventArgs) { DataSet data = (DataSet) workerEventArgs.Result; this.dataGrid.DataSource = data; } ); //4.Run your worker by calling the RunWorkerAsync() method on your BackgroundWorker instance. myDataWorker.RunWorkerAsync();
相关文章推荐
- .Net2.0 的新线程 ParameterizedThreadStart &BackgroundWorker
- Net2.0 的新线程 ParameterizedThreadStart &BackgroundW
- .Net2.0 的新线程 ParameterizedThreadStart &BackgroundW
- Net2.0 的新线程 ParameterizedThreadStart &BackgroundWorker
- .Net2.0 的新线程 ParameterizedThreadStart
- C# multithread,threadpool,ParameterizedThreadStart,传递参数给线程以及回调
- .Net2.0 的线程 ParameterizedThreadStart &BackgroundWorker
- [C#学习笔记之多线程1]使用ParameterizedThreadStart委托向线程函数传送参数
- 带参数线程的操作(ParameterizedThreadStart,ThreadStart)
- 使用ParameterizedThreadStart委托向线程函数传送参数
- .Net2.0 的新线程 ParameterizedThreadStart
- 创建线程(Background Thread)的N种方式
- Thread线程中start()和run()方法的区别
- C# 多线程编程 ThreadStart ParameterizedThreadStart
- Thread(线程),run(),start()
- CPrcThread<Worker>线程的挂起和恢复
- JAVA之旅(十二)——Thread,run和start的特点,线程运行状态,获取线程对象和名称,多线程实例演示,使用Runnable接口
- ParameterizedThreadStart
- Java Thread.interrupt 害人! 中断JAVA线程(zz)
- C# 多线程编程 ThreadStart ParameterizedThreadStart