我使用与此相似的代码,但这不起作用,因为客户端订阅回调操作在非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);
    });
}