通过同步上下文自定义消息框-无法访问已处置的对象

本文关键字:访问 对象 同步 上下文 自定义消息 | 更新日期: 2023-09-27 17:53:11

我在这里的情况相当奇怪。我创建了一个自定义的MessageBox表单(而不是内置的MessageBox.Show)。下面的代码是我用来调用表单的,当我需要它的时候:

    internal DialogResult ShowCustomMessageBox(string message, string caption, Icon icon = null)
    {
        var result = DialogResult.None;
        MainForm.Get.UISynchContext.Send(s =>
        {
            var messageBox = new DialogBox
            {
                Icon = icon,
                Text = caption,
                rtbInDialogBox = { Text = message }
            };
            result = messageBox.ShowDialog();
            messageBox.Dispose();
        }, null);
        return result;
    }

当我运行这个时,我在messageBox.ShowDialog();上得到一条错误消息,即messageBox实例已经被处置。

当我将代码发布到同步上下文时,我很确定MainForm会自己运行代码(而不是其他线程),我不确定为什么它告诉我messageBox已经被处置了。

任何想法?

通过同步上下文自定义消息框-无法访问已处置的对象

我找到问题了。显然,您需要指定对话框的所有者:result = messageBox.ShowDialog(MainForm.Get);