基于APM模式的异步实现及跨线程操作窗体或控件方法的实现示例

2023-06-20,,

最近在一家某电力外派公司开发相关于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(() =>
{
// 要做的事情
}));

  

基于APM模式的异步实现及跨线程操作窗体或控件方法的实现示例的相关教程结束。

《基于APM模式的异步实现及跨线程操作窗体或控件方法的实现示例.doc》

下载本文的Word格式文档,以方便收藏与打印。