C#里面MessageBox不能乱用,阻塞和非阻塞,模态对话框和非模态

C# 中的 MessageBox 默认为模态对话框,会导致程序阻塞,不点击按钮不会执行后续代码,但能响应其他消息如 Timer 事件,可能引发时序逻辑错误。正确做法是将 MessageBox 放在代码段末尾。对于不带图标和返回值的 MessageBox.Show,其行为是否与 Delphi 的 ShowMessage 相同仍需确认。
摘要由CSDN通过智能技术生成

我一开始以为这个MessageBox跟Delphi里面的ShowMessage是一样的,程序里可以随便放,因为C#里面就TM这一个封装好的弹出对话框提示消息函数,可以直接用的。


结果实习做程序测试被坑爹了,发现我错了,C#这个MessageBox默认是模态对话框,是阻塞的,也就是说你不区点击okNOCancel他一直显示在那里程序里后面的代码是停止的不往后执行,但是主程序仍然会响应其他消息,比如Timer事件,造成时序逻辑混乱。

原来随手写的是这样:

private void ReadOTPDataHandle()
        {
            if (xxxxxx)  //若命令字和地址都正确
            {
                xxxxxxxxxxxx;
            }
            else
            {
		MessageBox.Show("ERROR: communication data verify error!", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                cmdptr = 0; 
                mode = 4;
                comok = 100; 
                Btype = Type.Bu_no_type;
            }
        }


</pre><p></p><pre>

</

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值