zoukankan      html  css  js  c++  java
  • 基于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(() =>
    {
    	// 要做的事情
    }));
    

      

  • 相关阅读:
    Linux下shell
    分享微博@功能jquery代码及全面解析
    使用C#处理WebBrowser控件中的跨域问题
    Sqler 工具
    ASP.NET Web API批处理器
    Microsoft Academic Search
    C#中delegate对象Equals方法简析
    写一个编译器
    使用.NET中的Action及Func泛型委托
    电子政务数据库管理系统及应用软件系统安全分享(一)
  • 原文地址:https://www.cnblogs.com/briny/p/3195478.html
Copyright © 2011-2022 走看看