C# winforms应用程序c中未显示messagebox#

C# winforms应用程序c中未显示messagebox#,c#,winforms,exception,messagebox,C#,Winforms,Exception,Messagebox,当我尝试启动一个消息框(通常是通知异常,但我只是尝试从窗体启动一个)时,程序似乎会暂停,我无法单击任何东西,只能关闭它,但必须从visual studio窗口执行 我已经将问题缩小到与pictureBox1\u paint事件处理程序有关的部分,因为当我删除此代码时,消息框再次出现。以下是相关代码: private void pictureBox1_Paint(object sender, PaintEventArgs e) { using (Pen pen = new Pen(Colo

当我尝试启动一个消息框(通常是通知异常,但我只是尝试从窗体启动一个)时,程序似乎会暂停,我无法单击任何东西,只能关闭它,但必须从visual studio窗口执行

我已经将问题缩小到与pictureBox1\u paint事件处理程序有关的部分,因为当我删除此代码时,消息框再次出现。以下是相关代码:

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
    using (Pen pen = new Pen(Color.Black, 1))
    {
        e.Graphics.DrawRectangle(pen, mRect);
    }
    pictureBox1.Invalidate();
}
调用堆栈显示它在一些外部代码上,在扩展时,我认为它正在将消息框“绘制”到屏幕上,但似乎被什么东西挡住了?如果程序被暂停,它将显示下一行要执行的代码是当它从正在执行的任何操作返回时,如下所示的示例:

private void button2_Click(object sender, EventArgs e)
{
    if (GlobalPlot != null)
    {
        resize = ExpandToBound(GlobalPlot.Size, pictureBox1.Size);
    }
    else return;

    try
    {
        PlotPixel(resize);

    }
    catch (System.ArgumentOutOfRangeException index)
    {
        //this is the next line to execute:
        MessageBox.Show(index.Message,"Exception",MessageBoxButtons.OK);
        return;
    }
}

不太清楚发生了什么,但是非常感谢您的帮助。

消息框将在那里,但在您的表单下,您无法看到它。 试试这个:

MessageBox.Show(this, index.Message,"Exception",MessageBoxButtons.OK);
当messagebox出现时,它可能会覆盖图片,导致引发绘制事件。在绘制事件中,调用Invalidate()再次引发绘制事件,这将再次调用Invalidate(),再次引发绘制事件,这将继续并使窗体显示为冻结状态


从绘制事件中删除Invalidate()。

因为这是该主题中查看最多的问题,所以这里是一个真正可行的解决方案。只需填写所有MessageBox参数,如
MessageBox.Show(index.Message,“Exception”,MessageBoxButtons.OK,MessageBoxIcon.None,MessageBoxDefaultButton.Button1,MessageBoxOptions.DefaultDesktopOnly)

我也遇到了同样的问题,我通过从表单中调用消息框解决了这个问题:

而不是打电话

System.Windows.MessageBox.Show("test","test");
召唤


希望这有帮助

在调整大小=。。。语句,因此不需要使用难看的返回语句。事实上,MessageBox.Show之后不需要它。在绘画事件中,是pictureBox1.Invalidate();真的有必要吗?@JoeFletcher绘制方法中的Invalidate不会导致再次调用绘制事件吗?因此,油漆再次失效,油漆再次失效等等。。。导致MessageBox.Show()和任何其他方法必须等待,并使窗体显示为冻结状态。啊,多么简单的错误,我认为这解决了它。非常感谢你。我在想,需要调用它来确保矩形被渲染,现在它看起来很明显。没问题。如果这个答案解决了它,请考虑投票和/或接受答案。干杯,行得通。但背后的原因是什么?你能解释一下吗?
System.Windows.Forms.MessageBox.Show("test","test");