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

      

  • 相关阅读:
    Tensorflow2.0基础
    Tensorflow2.0多层感知机实现mnist手写数字识别
    numpy数组的维度操作和axis的对应关系
    jupyter notebook使用
    darknet批量测试并保存图片
    darknet训练自身数据集的小问题
    PIL批量更改图片格式 及bat/cmd文件批量修改文件后缀名
    cv::Mat用法
    VS配置opencv、cuda及调用yolo动态链接库
    VS之 32 or 64
  • 原文地址:https://www.cnblogs.com/briny/p/3195478.html
Copyright © 2011-2022 走看看