基于APM模式的异步实现及跨线程操作窗体或控件方法的实现示例
最近在一家某电力外派公司开发相关于GIS的功能,在实现代码的过程中出现了一些常见的问题比如:
1、跨线程执行窗体或控件操作(直接使用委拖)
2、异步模式执行某长时间耗时方法
经过一系列摸索可算找到解决方案,这里就记录一下两个重要的东西的使用方法
// 跨窗体或控件执行某个窗体的方法(使用委拖) public void Main(string[] args) { Invoke(new MethodInvoker(delegate() { // 这里是要执行的方法或相关操作 })); } // APM模式异步带参数实现 public void Main(string[] args) { Action<T> action = new Action<T>(BeginSampleCallBack); action.BeginInvoke(new T(),new AsyncCallback(EndSampleCallBack),action); } void BeginSampleCallBack<T>(T obj) { // 这里是要执行的方法或相关操作 } void EndSampleCallBack(IAsyncResult ar) { Action<T> action = (Action<T>)ar.AsyncState; action.EndInvoke(ar); } // APM模式异步无参数实现 public void Main(string[] args) { Action action = new Action(BeginSampleCallBack); action.BeginInvoke(new AsyncCallback(EndSampleCallBack),action); } void BeginSampleCallBack() { // 这里是要执行的方法或相关操作 } void EndSampleCallBack(IAsyncResult ar) { Action<T> action = (Action<T>)ar.AsyncState; action.EndInvoke(ar); }
顺便包含一下关于WPF跨线程操作控件的方法
object.Dispatcher.Invoke(new Action(() => { // 要做的事情 }));