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

      

  • 相关阅读:
    【总结】进程和线程的区别
    为什么要求数据链路层帧的长度必须限制在一定范围内?
    常用正交表
    用正交表设计测试用例
    测试中的杀虫剂困境
    作品集-1:淘宝支付宝登陆框
    # 36氪开放日 • 杭州 • 11月10日 # 谈谈参会感受
    《在你身边,为你设计》读后感
    抱怨的背后
    更快的方式实现PHP数组去重
  • 原文地址:https://www.cnblogs.com/briny/p/3195478.html
Copyright © 2011-2022 走看看