Net2.0 的新线程 ParameterizedThreadStart &BackgroundW
2010-02-15 07:43
369 查看
表示在 Thread 上执行的方法的委托方法,ThreadStart不能带参数,ParameterizedThreadStart是2.0中新增的,可以带参数(object类型的)
如果你想为一个线程传入变量你怎么办?
ThreadStart可不支持带参数的方法.所以你无法使用Thread来启动一个带参数的方法..
![](http://www.chenjiliang.com/Image/Extension/cs.gif)
复制
![](http://www.chenjiliang.com/Image/Save.jpg)
保存
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很象了,不错的新功能.
![](http://www.chenjiliang.com/Image/Extension/cs.gif)
复制
![](http://www.chenjiliang.com/Image/Save.jpg)
保存
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);
}
******* static void ThreadMethod(object o)
{
string str = o as string;
Console.WriteLine(str);
}
}
}
还有一个新增的类BackgroundWorker,可以用于启动后台线程,并在后台计算结束后及时调用主线程的方法.一个常见的应用就是在 DataGrid中载入数据的时候.因为从数据库中载入DataSet比较耗时, 所以你可以使用BackgroundWorker来进行载入, 当 DataSet构造好后就立即绑定上DataGrid. 其实该功能同样可以通过Delegate的异步调用实现不过BackgroundWorker用 起来更方便一些.
![](http://www.chenjiliang.com/Image/Extension/cs.gif)
复制
![](http://www.chenjiliang.com/Image/Save.jpg)
保存
//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();
如果你想为一个线程传入变量你怎么办?
ThreadStart可不支持带参数的方法.所以你无法使用Thread来启动一个带参数的方法..
![](http://www.chenjiliang.com/Image/Extension/cs.gif)
复制
![](http://www.chenjiliang.com/Image/Save.jpg)
保存
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很象了,不错的新功能.
![](http://www.chenjiliang.com/Image/Extension/cs.gif)
复制
![](http://www.chenjiliang.com/Image/Save.jpg)
保存
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);
}
******* static void ThreadMethod(object o)
{
string str = o as string;
Console.WriteLine(str);
}
}
}
还有一个新增的类BackgroundWorker,可以用于启动后台线程,并在后台计算结束后及时调用主线程的方法.一个常见的应用就是在 DataGrid中载入数据的时候.因为从数据库中载入DataSet比较耗时, 所以你可以使用BackgroundWorker来进行载入, 当 DataSet构造好后就立即绑定上DataGrid. 其实该功能同样可以通过Delegate的异步调用实现不过BackgroundWorker用 起来更方便一些.
![](http://www.chenjiliang.com/Image/Extension/cs.gif)
复制
![](http://www.chenjiliang.com/Image/Save.jpg)
保存
//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
- 【zz】.Net2.0 的新线程 ParameterizedThreadStart &BackgroundWorker
- .Net2.0 的线程 ParameterizedThreadStart &BackgroundWorker
- .Net2.0 的新线程 ParameterizedThreadStart &BackgroundWorker
- .Net2.0 的新线程 ParameterizedThreadStart &BackgroundW
- API::CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)UpdateThread,(LPVOID)ThreadPara,CREATE_SUSPENDED,&ThreadId);//开始一个计算线程
- .Net2.0 的新线程 ParameterizedThreadStart
- 带参数线程的操作(ParameterizedThreadStart,ThreadStart)
- EF Core使用SQL调用返回其他类型的查询 ASP.NET Core 2.0 使用NLog实现日志记录 CSS 3D transforms cSharp:use Activator.CreateInstance with an Interface? SqlHelper DBHelper C# Thread.Abort方法真的让线程停止了吗? 注意!你的Thread.Abort方法真
- .Net2.0 的新线程 ParameterizedThreadStart
- 使用ParameterizedThreadStart委托向线程函数传送参数
- [C#学习笔记之多线程1]使用ParameterizedThreadStart委托向线程函数传送参数
- BackgroundWorker .net 2.0 里微软的多线程组件 学习 Cross-thread operation not valid: Control 'RichTextBox1' accessed from a thread other than the thread it was created on.
- C# multithread,threadpool,ParameterizedThreadStart,传递参数给线程以及回调
- NET(C#):线程本地存储(Thread-Local Storage)之ThreadStatic, LocalDataStoreSlot和ThreadLocal<T>
- 创建线程(Background Thread)的N种方式
- ThreadStart 与 ParameterizedThreadStart
- Microsoft ship Visual Studio 2005 and .NET 2.0 (Links & Favorites)
- java中Thread线程中的 start()和run()方法的区别
- 温故知新ASP.NET 2.0(C#)(4) - Cache&SqlCacheDependency(缓存和SqlCacheDependency特性)