0

我有一个要求,在我的应用程序中应该显示警报框(对话框)。问题是应该首先显示最新的警报,然后在关闭它时显示下一个警报 - 依此类推。所以我决定将对话创建移动到单独的线程,这样就不需要关闭它们以执行剩余的代码。

我做了类似下面的事情。但问题是它们不会以对话的形式出现(可以在不关闭它们的情况下进入主窗体)。所以我决定使用ShowDialog(IWin32Window) 但是它给了我跨线程操作无效的错误。

如何处理这种情况?

private void button2_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < 3; i++)
            {
                new Thread(new ThreadStart(ShowDialogue)).Start();
                Thread.Sleep(1500);
            }
        }


 private void ShowDialogue()
        {          
                FormDialogue fd = new FormDialogue(-1);
                fd.ShowDialog( ); 

        }
4

2 回答 2

0

如果您希望主表单可用,请使用fd.Show()而不是。fd.ShowDialog()不需要线程。

于 2013-01-30T13:14:53.000 回答
0

从您的问题看来,您希望生成的“对话框堆栈”是模态的(一次查看一个对话框,必须将它们全部关闭才能返回主窗体)。

我建议不要使用线程,而是直接在其中运行带有 ShowDialog 的循环。例如:

private void button2_Click(object sender, EventArgs e)
{
    for (int i = 0; i < 3; i++)
    {
        FormDialogue fd = new FormDialogue(-1);
        fd.ShowDialog();
    }
}

您将需要根据上述优先级保留您想要处理它们的警报列表。

但是,我怀疑您会发现,如果有很多警报对话,您的用户不会非常喜欢这种方法,您可能会发现自己回到了一次显示所有警报的单个对话。

另一种选择是将所有警报信息(可能在列表中)发送到单个对话框,并在该对话框中让 OK 按钮遍历显示警报的列表,直到完成。

无论哪种方式都应该非常简单。

于 2013-01-30T13:21:51.153 回答