首页 > 编程语言 >C# 一种不阻塞的 MessageBox 用法

C# 一种不阻塞的 MessageBox 用法

时间:2023-02-13 09:24:40浏览次数:32  
标签:MessageBox C# 阻塞 System MessageBoxShowHandler msg using DialogResult public

主界面一个测试按钮。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp2_TestMessageBox
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            m_process = new TProcess();
            m_process.MessageBoxShowHandler = MessageBoxShow;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
        }

        private TProcess m_process;

        private void button1_Click(object sender, EventArgs e)
        {
            m_process.Start();
        }

        public DialogResult MessageBoxShow(string msg)
        {
            return MessageBox.Show(msg, "hello", MessageBoxButtons.YesNo);
        }
    }

    class TProcess
    {
        public TProcess()
        {

        }
        public Func<string, DialogResult> MessageBoxShowHandler;

        public void Start()
        {
            Thread m_Th = new Thread(new ThreadStart(() => { MessageBoxShow("Hello Hi 你好!"); }));
            m_Th.IsBackground = true;
            m_Th.Start();
        }

        public void MessageBoxShow(string msg)
        {
            MessageBox.Show("第一");
           

            DialogResult result = DialogResult.None;
            Task.Run(() =>
            {
                if (MessageBoxShowHandler != null)
                {
                    result = /*MessageBoxShowHandler(msg)*/MessageBox.Show(msg, "Task 内部测试", MessageBoxButtons.YesNo);
                }
            });
            Task.Run(() =>
            {
                if (MessageBoxShowHandler != null)
                {
                    //result = MessageBoxShowHandler(msg);
                    result = (DialogResult)(MessageBoxShowHandler?.Invoke(msg + "1"));
                }
            });

            while (true)
            {
                if (result == DialogResult.Yes)
                {
                    Console.WriteLine("Yes");
                    break;
                }
            }
        }       
    }
}

标签:MessageBox,C#,阻塞,System,MessageBoxShowHandler,msg,using,DialogResult,public
From: https://www.cnblogs.com/huvjie/p/17115258.html

相关文章

  • 使用cnn,bpnn,lstm实现mnist数据集的分类
    1.cnnimporttorchimporttorch.nnasnnimporttorch.nn.functionalasFimporttorch.optimasoptimfromtorchvisionimportdatasets,transforms#设置随机数......
  • Spring boot 学习笔记:第十章--实现AcApp端
    开启最后一章的学习java-jarmatchingsystem.jar启动jar包ctrl+shift+r浏览器强制刷新重新打包的流程app.vue删去div.windows标签。style加上scoped属......
  • Cookie 和 Session 区别
    Cookie保存客户的数据,服务器产生发回客户端Cookie数据保存客户端,不安全Cookie数据限制64KBCookie保存SessionID值Session数据存储服务器相对Cookie安全不限制类......
  • css积累-1
    提问1如何设置div居中回答style="width:95%;min-height:400px;display:flex;"提问2如何播放MP4回答<videoid='video'style='width:95%;min-height:400px......
  • Java中object转list
    java/***object转list**@paramobj*@paramclazz*@param<T>*@return*/publicstatic<T>List<T>castList(Objec......
  • javaStack
    Stack基础感觉可以根据ArrayDeque来实现,也可以使用LinkedList来实现。ArrayDeque<Integer>stack=newArrayDeque<>();Java顺序栈(数组实现)栈(Stack)数据结构通常有一......
  • abstract 抽象类
     约束~抽象方法,只有方法名字,没有方法的实现不能new这个抽象类,只能靠子类去实现它;约束!抽象类中可以写普通方法~抽象方法必须在抽象类中~......
  • AtCoder随做
    突然发现只有我没写过AT。没写题解不意味着没做,有的忘了写或者太草率了就算了。部分前言删了。ABC020D题解\[\sum_{i=1}^n\operatorname{lcm}\{i,k\}\\=k\sum_{i=......
  • MixGo CE及外接模块管脚简单介绍
    之前用习惯了Arduino系列的板卡,也习惯了上面的管脚使用方法,换成MixGo系列的板卡,都是TypeC接口,这个管脚应该怎么看呢?MixGo系列的外接模块管脚又是怎么看,程序里面应该怎么......
  • eclipse的下载及安装
    Eclipse下载 下载网址EclipseDownloads|TheEclipseFoundation Eclipse安装 找到下载的安装包点击进行安装 选择第二个 选择Java1.8所在目录和javaee......