首页 > 编程语言 >C# Winform 界面操作异步回调 AsyncCallback

C# Winform 界面操作异步回调 AsyncCallback

时间:2023-05-13 18:36:33浏览次数:51  
标签:Control sender ctrl C# res private AsyncCallback DebugActionDic Winform

using System;
using System.Collections.Generic;
using System.Threading;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            m_DebugActionDic = new Dictionary<object, Func<bool>>();
        }

        private Dictionary<object, Func<bool>> m_DebugActionDic;
        private string m_ErrorMessage;
        private void ResultCallBack(IAsyncResult res)
        {
            Control ctrl = res.AsyncState as Control;
            ctrl.Invoke(new Action(() => ctrl.Enabled = true));

            if (!m_DebugActionDic[res.AsyncState].EndInvoke(res))
            {
                MessageBox.Show(m_ErrorMessage);
            }

            m_DebugActionDic.Remove(res.AsyncState);
        }

        private bool Button1Action()
        {
            try
            {
                int floor = int.Parse(textBox1.Text);
                Thread.Sleep(3000);

                return true;
            }
            catch (Exception ex)
            {
                m_ErrorMessage = ex.Message;
                return false;
            }
        }

        private bool Button2Action()
        {
            try
            {
                int floor = int.Parse(textBox2.Text);
                Thread.Sleep(3000);

                return true;
            }
            catch (Exception ex)
            {
                m_ErrorMessage = ex.Message;
                return false;
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Control ctrl = sender as Control;
            ctrl.Enabled = false;
            m_DebugActionDic.Add(sender, new Func<bool>(Button1Action));
            m_DebugActionDic[sender].BeginInvoke(ResultCallBack, sender);
        }

        private void button2_Click(object sender, EventArgs e) // Button 时间可以都关联一个就可以了
        {
            Control ctrl = sender as Control;
            ctrl.Enabled = false;
            m_DebugActionDic.Add(sender, new Func<bool>(Button2Action));
            m_DebugActionDic[sender].BeginInvoke(ResultCallBack, sender);
        }
    }
}

标签:Control,sender,ctrl,C#,res,private,AsyncCallback,DebugActionDic,Winform
From: https://www.cnblogs.com/huvjie/p/17397890.html

相关文章

  • CF1698F题解
    考虑一个函数\(f(a)\),它的返回值是一个二维数组\(b\),接受值是一个数组\(a\)。对于所有\(i=1\ton-1\)的\(i\),把\(b_{a_i}{a_{i+1}}++\),然后返回\(b\)。\(f(a)!=f(b)\)且\(a_1=b_1,a_n=b_n\)是无解的充要条件,因为显然对于数组的每次翻转操作它的\(f\)返回值都不会变。\(f(a)!=f(b......
  • MapReduce分布式计算(三)
    JSONJSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式.JSON和Java对象的转换movie.txt{"movie":"1193","rate":"5","timeStamp":"978300760","uid":"1"}{"movie":"661",......
  • ARMv7-A 处理器窥探(2) —— CP15 协处理器
    1、ARMv7-A协处理器ARMv7-A处理器除了标准的R0~R15,CPSR,SPSR以外,由于引入了MMU、TLB、Cache等内容,ARMv7-A使用协处理器来对这些扩展来进行管理,ARMv7-A支持16个协处理器,编号从CP0~CP15,其中的CP15协处理器称之为系统控制协处理器,CP15协处理器下的寄存器包含了MMU、TL......
  • 4. LeetCode 367. 有效的完全平方数
     代码:classSolution{public:boolisPerfectSquare(intnum){longlonga=(longlong)num;longlongleft=0;longlongright=a;while(left<=right){longlongmid=left+((right-left)>>......
  • 【LeetCode数据结构04】字符串String
    TableofContents双指针344.反转字符串541.反转字符串II剑指Offer05.替换空格151.翻转字符串里的单词剑指Offer58-II.左旋转字符串KMP28.实现strStr459.重复的子字符串Solutions344.反转字符串力扣题目链接思路代码541.反转字符串II......
  • 翻译 coursera 视频为中文
    1.下载英文视频2.现在vtt字幕3. https://www.happyscribe.com/subtitle-tools/convert-vtt-to-srt转vtt文件为srt文件4.使用剪映,把英文视频导入,识别字幕,把srt字幕导入,根据之前的字幕对齐时间线,导出5.把srt文件丢给chatgpt进行翻译,再使用python脚本格式化......
  • Spring层引入数据库jdbc需要导的包
    <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.21</version></dependency><dependency>......
  • STM32的HAL库软件模拟IIC
    softiic.h1#ifndef__SOFTI2C_H_2#define__SOFTI2C_H_34#include"main.h"5//使用IICXPD6,PC167#defineSDA_IN(){GPIOC->MODER&=~(3<<1*2);GPIOC->MODER=(0<<1*2);}8#defineSDA_OUT(){GPIOC-&g......
  • 信捷xc3 plc modbus rtu方式通讯两台变频器资料 本程
    信捷xc3plcmodbusrtu方式通讯两台变频器资料本程序采用rtu方式,一次通讯两台变频器,一台台达vfd-el,一台三菱E700(通讯多台也可以增加),功能如触摸屏所示,控制正反转,停止,频率设定,运行数据的读取。ID:2314667380598028......
  • Anaconda下载与安装详解
    目录1Anaconda1.1简介1.2下载安装1.3配置环境变量1.4下载配置1.4.1conda配置1.4.1.1修改conda下载源1.4.1.2删除下载源1.4.1.3包下载目录1.4.1.4下载报错1.4.2pip配置1.4.2.1配置源1.4.2.2下载目录1.4.2.3修改下载目录1.5修改虚拟环境地址1.5.1通过配置文件.cond......