0

我的 WPF 应用程序中有一个自定义消息框。问题是:当我在不是从 Window 派生的类中调用它时,没有显示此消息框。没有编译错误。引用已正确添加。

我无法在此类中调用任何 UI 组件。

调试时出现异常:“调用线程必须是STA,因为很多UI组件都需要这个”

4

1 回答 1

5

我遇到了同样的问题,问题是当我们创建自定义 MessageBox 时,它可能源自 Windows 等 UI 组件,然后当我们尝试从应用程序中的代码创建的线程中创建并显示自定义 MessageBox 时(意思是后台线程)我们得到错误:

“调用线程必须是 STA,因为许多 UI 组件都需要这个”。

正如“mottukutty”对他自己的问题所评论的那样,解决方案是使用应用程序的Dispatcher来显示我们的自定义 MessageBox,例如:

public partial class MessageBox : Window
{
    private static MessageBox _messageBox;

    public static MessageBoxResult Show(string message, MessageBoxType type, 
        string okText = null, string yesText = null, string noText = null)
    {
        Application.Current.Dispatcher.Invoke(show);

        void show()
        {
            _messageBox = new MessageBox(message, type, okText, yesText, noText);

            _messageBox.ShowDialog();
        }

        return _messageBox.Result;
    }
}
于 2017-07-12T05:21:28.743 回答