我使用与此相似的代码,但这不起作用,因为客户端订阅回调操作在非UI线程中运行。如何将回调操作安排到Windows表单UI线程?
internal static class Program
{
[STAThread]
private static void Main()
{
Application.SetHighDpiMode(HighDpiMode.SystemAware);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
using (var context = new ProgramApplicationContext())
{
Application.Run(context);
}
}
}
internal class ProgramApplicationContext : ApplicationContext
{
public ProgramApplicationContext()
{
...
_client.subscribe("event", message => {
var form = new CommunicationForm();
form.Show();
});
}
}
分析解答
您可以使用SynchronizationContext在UI线程上创建表单。
public ProgramApplicationContext()
{
...
var ctx = SynchronizationContext.Current;
_client.subscribe("event", message => {
ctx.Send(state => {
var form = new CommunicationForm();
form.Show();
}, null);
});
}