以线程安全的方式创建新窗口

Jul*_*ien 1 c# wpf signalr

我使用signalR将消息推送到服务器并向下推送到特定客户端.

当我发送消息时,接收客户端从我的signalR服务器发送一个ReceiveMessage函数调用,该函数映射到我的应用程序中的静态类函数.然后静态类尝试执行new Chat()(我的消息传递窗口类)以在接收端打开消息窗口.

这引发了 calling thread must be STA, because many UI components require this.

我之前曾与代表合作过简单的表单元素(比如更改文本框),但我不明白如何在这种情况下应用它.当我读到Invoke它时,会在某种形式的对象上调用它,这在我的情况下是不存在的?

TLDR; 如何从静态类函数调用创建和显示表单的新实例

Syn*_*der 5

使用当前GUI的线程调度程序.然后调用invoke.例子:

Application.Current.Dispatcher.Invoke(() => { 
      var win = new Window();
      win.show(); 
});
Run Code Online (Sandbox Code Playgroud)