WPF多线程
第1种用 Task类. 推荐用这个办法
publicvoid 工作_Task()
{
Dispatcher x = Dispatcher.CurrentDispatcher;//取得当前工作线程
//另开线程工作
Task<int> 计数 =new Task<int>(() => { return 计数方法(); });
计数.ContinueWith(工作完毕后方法);//工作完毕后执行的方法
计数.Start();//开始工作
}
publicvoid 工作完毕后方法(Task<int> 参数)
{
if (参数.IsCompleted) //正常工作完毕
{
var 结果 = 参数.Result; //取得结果
//处理结果.
//本方法非界面线程.如果需要在界面线程操作,需要转移到界面线程
}
}
int c;
publicint 计数方法()
{
return c++;
}
{
Dispatcher x = Dispatcher.CurrentDispatcher;//取得当前工作线程
//另开线程工作
Task<int> 计数 =new Task<int>(() => { return 计数方法(); });
计数.ContinueWith(工作完毕后方法);//工作完毕后执行的方法
计数.Start();//开始工作
}
publicvoid 工作完毕后方法(Task<int> 参数)
{
if (参数.IsCompleted) //正常工作完毕
{
var 结果 = 参数.Result; //取得结果
//处理结果.
//本方法非界面线程.如果需要在界面线程操作,需要转移到界面线程
}
}
int c;
publicint 计数方法()
{
return c++;
}
第2种方法用线程.
publicvoid 工作_Thread()
{
Dispatcher x = Dispatcher.CurrentDispatcher;//取得当前工作线程
//另开线程工作
System.Threading.ThreadStart start =delegate()
{
//工作函数
Func<string> fu =new Func<string>(() => { return""; });//工作函数
var 工作结果 = fu();//开始工作
//异步更新界面
x.BeginInvoke(new Action(() =>
{
//在界面线程操作 可以使用 工作结果
}), DispatcherPriority.Normal);
};
new System.Threading.Thread(start).Start(); //启动线程
}
{
Dispatcher x = Dispatcher.CurrentDispatcher;//取得当前工作线程
//另开线程工作
System.Threading.ThreadStart start =delegate()
{
//工作函数
Func<string> fu =new Func<string>(() => { return""; });//工作函数
var 工作结果 = fu();//开始工作
//异步更新界面
x.BeginInvoke(new Action(() =>
{
//在界面线程操作 可以使用 工作结果
}), DispatcherPriority.Normal);
};
new System.Threading.Thread(start).Start(); //启动线程
}
第3种方法用 BackgroundWorker.
这种方法介绍的比较多了.就不说了.
BackgroundWorker 后台线程;
publicvoid 线程初始化()
{
后台线程 =new BackgroundWorker();
后台线程.WorkerSupportsCancellation =true; //可以取消
后台线程.DoWork +=new DoWorkEventHandler(后台线程_DoWork);
后台线程.RunWorkerCompleted +=new RunWorkerCompletedEventHandler(后台线程_RunWorkerCompleted);
}
publicvoid 启动后台线程()
{
后台线程.RunWorkerAsync();
}
void 后台线程_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
//工作完毕的方法
}
void 后台线程_DoWork(object sender, DoWorkEventArgs e)
{
//工作方法
}
publicvoid 线程初始化()
{
后台线程 =new BackgroundWorker();
后台线程.WorkerSupportsCancellation =true; //可以取消
后台线程.DoWork +=new DoWorkEventHandler(后台线程_DoWork);
后台线程.RunWorkerCompleted +=new RunWorkerCompletedEventHandler(后台线程_RunWorkerCompleted);
}
publicvoid 启动后台线程()
{
后台线程.RunWorkerAsync();
}
void 后台线程_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
//工作完毕的方法
}
void 后台线程_DoWork(object sender, DoWorkEventArgs e)
{
//工作方法
}