.Net2.0 的线程 ParameterizedThreadStart &BackgroundWorker
来源:互联网 发布:深度优先遍历 java 编辑:程序博客网 时间:2024/05/17 07:55
如果你想为一个线程传入变量你怎么办?
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!
//public delegate void ThreadStart(); u can't pass a Parameter
Thread myThread = new Thread(myThreadDelegate);
myThread.Start(); //myThread.Start(o); Wrong!
不过在.Net1.0下,你可以通过Delegate的异步调用来实现.现在在.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);
}
}
}
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();
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();
原文地址:http://www.cnblogs.com/idior/archive/2005/07/25/199946.html
- Net2.0 的新线程 ParameterizedThreadStart &BackgroundWorker
- .Net2.0 的线程 ParameterizedThreadStart &BackgroundWorker
- .Net2.0 的新线程 ParameterizedThreadStart
- .Net2.0 的新线程 ParameterizedThreadStart
- .Net2.0中的BackgroundWorker
- 关于net2.0里面新出现的类backgroundworker的应用
- 关于net2.0里面新出现的类backgroundworker的应用
- 带参数线程的操作(ParameterizedThreadStart,ThreadStart)
- [转贴]ParameterizedThreadStart,ThreadStart的使用,线程Thread传参数
- 用ParameterizedThreadStart创建一个带参数的线程
- C#的BackgroundWorker--启动后台线程
- WPF BackgroundWorker线程与进度的处理
- ParameterizedThreadStart
- ParameterizedThreadStart与ThreadStart的区别
- BackgroundWorker线程控件用法
- 在单独的线程执行操作类BackgroundWorker
- 关于异步线程BackgroundWorker类的使用心得
- C#中让副线程跟主线程交互的类-BackgroundWorker
- IIS7安装Application Request Routing
- 红豆
- 企业做大的秘笈:知识升级,人才贬值
- 事件与消息区别的经典描述
- "你今天听见《风声》了吗“ 学习无处不在继潜伏后《风声》观后感
- .Net2.0 的线程 ParameterizedThreadStart &BackgroundWorker
- Remoting基本原理及其扩展机制
- 听小说---潜水钟与蝴蝶
- Reading Notes on NS2(12)
- 沿着“重用”我们一路走来——SA、OO(DP)、Component、SOA、AOP
- 网络空间
- Distributed Application in .Net
- C# 3.0 Orcas 简介
- 详谈ROM和RAM的异同