BackgroundWorker的使用方法
来源:互联网 发布:舒克高清下载软件官方 编辑:程序博客网 时间:2024/06/01 08:32
参考: http://www.cnblogs.com/zhjp11/archive/2009/11/20/1606912.html
http://www.csharpwin.com/csharpspace/10823r5320.shtml C#异步调用与线程总结
http://blog.csdn.net/byxdaz/article/details/6737639 C#多线程编程
http://www.jb51.net/article/34804.htm BackgroundWorker创建多个线程的教程
首先介绍一下BackgroundWorker的相关属性和方法:
属性:
WorkerReportsProgress:是否可以报告进度。
WorkerSupportsCancellation:是否允许异步中止。
IsBusy:是否在运行。
CancellationPending:判断BackgroundWorker是否已经异步取消。
方法:
RunWorkerAsync:开始执行任务。触发DoWork事件
ReportProgress:异步提醒,触发ProgressChanged事件,但是这个如果可以使用,必须设置WorkerReportsProgress为True
CancelAsync:取消BackgroundWorker操作。
事件:
DoWork:执行RunWorkerAsync后触发,异步执行的认为。 该事件中进行耗时的操作,但是不要涉及对UI元素的操作
ProgressChanged:执行ReportProgress时触发,异步获得进度。
RunWorkerCompleted:线程结束时触发,主要有成功结束,发生异常或者取消时发生。
异步回调。这个方法是最为推荐的方法。
那么什么是异步回调呢?或许刚刚大家有注意到在调用Delegate.BeginInvoek()方法时,只有有三个参数BeginInvoke(object parameter,AsyncCallback asynccallback,object state),上面只讲第一个参数,也就是委托调用的有参函数所需的参数,多个参数也可以,只需要按照委托声明时的顺序依次添加就可以了,第二个是一个AsyncCallBack类型的委托也就是异步操作执行完后要执行的委托函数,比如需要返回结果、输出什么的都可以在这个委托函数里执行,该委托函数必须有一个IAsyncResult类型的参数。第三个是额外的状态参数,一般都是该委托对象。
下面通过实例给大家进行讲解。
第一步还是先建立一个委托
delegate string SayHello(string name);
主函数:
static void Main(string[] args)
{
Console.WriteLine("主线程的ID:" + Thread.CurrentThread.ManagedThreadId);//标记显示主 线程ID
SayHello sayhello = new SayHello(Say);
IAsyncResult iResult=sayhello.BeginInvoke("Olive",new AsyncCallback(Result), sayhello);//三个参数:1、Say()函数的参数,2、AsyncCallback类型的委托,(异步操作结束后执行的委托函数),3、将sayhello对象作为状态参数,在Result函数中会有用到该参数
Console.ReadKey();
}
//AsyncCallback委托所执行的函数
private static void Result(IAsyncResult iasyncresult)
{
SayHello sayhello = (SayHello)iasyncresult.AsyncState;//获取IAsyncResult对象的AsyncState的属性,即为Delegate.BeginInvoke()的第三个参数即sayhello。
string s = sayhello.EndInvoke(iasyncresult);
Console.WriteLine(s + "------好了,异步调用到这里已经结束了");
}
private static string Say(string name)
{
Console.WriteLine("Hello!--------" + name);
Console.WriteLine("当前的线程ID为:" + Thread.CurrentThread.ManagedThreadId);
return "I Love you " + name;
}
c#子线程执行完怎么通知主线程
定义一个委托实现回调函数public delegate void CallBackDelegate(string message);程序开始的时候//把回调的方法给委托变量CallBackDelegate cbd = CallBack;//启动线程Thread th = new Thread(Fun);th.Start(cbd);//开始线程,代入参数//线程执行的方法 参数是个委托, 线程中参数需要用object类型.public void Fun(object o){ //这里是你的操作代码,循环,根据条件退出whilewhile(true) { } //把传来的参数转换为委托CallBackDelegate cbd = o as CallBackDelegate; //执行回调.cbd("这个线程传回的信息");}//回调方法private void CallBack(string message){ //主线程报告信息,可以根据这个信息做判断操作,执行不同逻辑.MessageBox.Show(message);}
- C# BackgroundWorker 的使用方法
- BackgroundWorker的使用方法
- 非常实用的C# backgroundworker使用方法
- 非常实用的C# backgroundworker使用方法
- 非常实用的C# backgroundworker使用方法
- C#后台运行控件BackgroundWorker的使用方法
- c# BackgroundWorker控件使用方法
- BackgroundWorker控件使用方法
- c# BackgroundWorker控件使用方法
- c# BackgroundWorker控件使用方法
- c# BackgroundWorker控件使用方法
- BackgroundWorker控件的使用方法介绍及示例程序
- BackgroundWorker控件的使用方法介绍及示例程序
- VS2005中BackgroundWorker组件使用方法
- 【转载于百度空间】C# WinForm中的BackgroundWorker控件的使用方法
- BackgroundWorker使用方法样例介绍 C#
- BackgroundWorker的替代者!
- BackgroundWorker的替代者!
- 大数据Hadoop核心架构HDFS+MapReduce+Hbase+Hive内部机理详解
- 自定义浏览器协议,实现web程序调用本地程序
- Swift-iOS常用控件(UIActivityIndicatorView 活动指示器)
- 时间相关API实战1
- 3周项目 顺序表的基本运算
- BackgroundWorker的使用方法
- 第四周项目3单链表的应用(1)
- TextView清空默认自带的padding
- TabHost
- 第四周项目3 单链表应用(1)
- 第四周 建设“单链表”算法库
- TCP/IP 建立连接、断开连接的过程
- 使用Btrace进行线上系统性能分析
- 安卓中备份和恢复短信