您的位置:首页 > 产品设计 > 产品经理

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

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


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: