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

  

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

  1. WPF跨线程操作UI界面控件

       在WPF应用中,如果遇到多线程的需求时,如果引用WPF控件时会引发异常,异常内容:调用线程无法访问此对象,因为另一个线程拥有该对象.具体如下: 调用代码: ThreadcountThread= ...

  2. 实现Winform 跨线程安全访问UI控件

    在多线程操作WinForm窗体上的控件时,出现“线程间操作无效:从不是创建控件XXXX的线程访问它”,那是因为默认情况下,在Windows应用程序中,.NET Framework不允许在一个线程中直接 ...

  3. WinForm中新开一个线程操作 窗体上的控件(跨线程操作控件)

    最近在做一个winform的小软件(抢票的...).登录窗体要从远程web页面获取一些数据,为了不阻塞登录窗体的显示,开了一个线程去加载数据远程的数据,会报一个错误"线程间操作无效: 从不是 ...

  4. C#中利用委托实现多线程跨线程操作

    在使用VS2005的时候,如果你从非创建这个控件的线程中访问这个控件或者操作这个控件的话就会抛出这个异常.这是微软为了保证线程安全以及提高代码的效率所做的改进,但是也给大家带来很多不便. 其实解决这个 ...

  5. C#跨线程操作控件的最简单实现探究

    随着程序复杂度的提高,程序不可避免会出现多个线程,此时就很可能存在跨线程操作控件的问题. 跨线程操作UI控件主要有三类方式: 1.禁止系统的线程间操作检查.(此法不建议使用) 2.使用Invoke(同 ...

  6. winform 跨线程操作控件

    当进行winform的开发时,经常遇到用时比较久的操作,在传统的单线程程序中,用户必须等待这个耗时操作完成以后才能进行下一步的操作,这个时候,多线程编程就派上用场了,将这个耗时的操作放到一个新的子线程 ...

  7. 扩展BindingList,防止增加、删除项时自动更新界面而不出现“跨线程操作界面控件 corss thread operation”异常

    在做界面程序时,常常需要一些数据类,界面元素通过绑定等方式显示出数据,然而由于UI线程不是线程安全的,一般都需要通过Invoke等方式来调用界面控件.但对于数据绑定bindingList而言,没法响应 ...

  8. 基于MVC4+EasyUI的Web开发框架经验总结(13)--DataGrid控件实现自动适应宽带高度

    在默认情况下,EasyUI的DataGrid好像都没有具备自动宽度的适应功能,一般是指定像素宽度的,但是使用的人员计算机的屏幕分辨率可能不一样,因此导致有些地方显示太大或者太小,总是不能达到好的预期效 ...

  9. 实现虚拟模式的动态数据加载Windows窗体DataGridView控件 .net 4.5 (一)

    实现虚拟模式的即时数据加载Windows窗体DataGridView控件 .net 4.5 原文地址 :http://msdn.microsoft.com/en-us/library/ms171624 ...

  10. C# 跨线程操作控件(简洁)

                                              C# 跨线程操作控件 .net 原则上禁止跨线程访问控件,因为这样可能造成错误的发生.解决此问题的方法有两个: 第一 ...

随机推荐

  1. DASCTF NOV X联合出题人-PWN

    太忙了,下午4点才开始做,,剩下的以后补上 签个到 逻辑很简单两个功能的堆,一个就是申请heap.还有一个是检验如果校验通过就会得到flag 申请模块 ​ 中间0x886是个很恶心的东西,需要我们绕过 ...

  2. KERNEL1

    WHAT IS KERNEL KERNEL是一个负责连接计算机硬件与软件的一个模块,当软件对硬件进行调用的时候,或者发送一些置零的时候,KERNEL负责将这些指令转化并发送给CPU或者计算机中其他硬件 ...

  3. CSS clip-path 属性

    属性定义及使用说明 clip-path 属性使用裁剪方式创建元素的可显示区域.区域内的部分显示,区域外的隐藏.可以指定一些特定形状. 注意: clip-path 属性将替换已弃用的 clip 属性. ...

  4. Activiti7开发(五)-我的审批历史

    查看本人审批过的历史 public AjaxResult historyFromData(@RequestParam(value = "businessKey",required ...

  5. Flink基本概念及架构

    1.基本概念 无界和有界数据.任何类型的数据都可以形成一种事件流.信用卡交易.传感器测量.机器日志.网站或移动应用程序上的用户交互记录,所有这些数据都形成一种流.数据可以被作为 无界 或者 有界 流来 ...

  6. 50个Java面试必问的面试题,我都给你整好了

    ​我们整理了一份主要的Angular面试问题清单,分为三部分: 角度面试问题–初学者水平 角度面试问题–中级 角度面试问题–高级 初学者水平–面试问题 1.区分Angular和AngularJS. 2 ...

  7. RabbitMQ 消息中间件总结

    RabbitMQ 是实现高级消息队列协议(AMQP:Advanced Message Queue Protocol)的开源代理软件,也称为面向消息的中间件.支持多种操作系统.多种编程语言.Rabbit ...

  8. Clion 连接 WSL 编译Unix环境

    Clion 连接 WSL 编译Unix环境 安装 WSL Ubuntu 18版本,创建后不要换源,upgrade后安装CMake.g++.gcc 安装 Clion,创建项目 进入setting 在 B ...

  9. 剑指offer 第 17 天

    第 17 天 排序(中等) 剑指 Offer 40. 最小的k个数 输入整数数组 arr ,找出其中最小的 k 个数.例如,输入4.5.1.6.2.7.3.8这8个数字,则最小的4个数字是1.2.3. ...

  10. Stanford CS 144, Lab 0: networking warmup 实验

    Stanford CS 144, Lab 0: networking warmup Finish Stanford CS144 lab0 and pass the test. 2023/03/29 - ...