基于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(() =>
{
	// 要做的事情
}));

  

posted @ 2013-07-17 11:44  star丶清影  阅读(300)  评论(0编辑  收藏  举报