运行多个UI线程

Jan*_*oom 8 c# multithreading message-pump geckofx winforms

跳到底部查看问题; 这只是一些额外的信息

我使用组件(GeckoFX)来渲染一些网站,很好,但它只能用于Windows窗体; 因为它必须绑定到可以绘制的WinForms对象.因为所有WinForms都在同一个线程中运行,所以我一次只能使用一个GeckoFX实例; 所以我决定以WinForm的形式创建一个"工人类",并在那里添加所有逻辑.表单不需要与主表单通信.

现在我可以启动10个窗口,它们最终会工作,但是每个新窗体都会在所有其他窗体处理完所有GeckoFX事件之前等待,因为你不能在一个线程上使用多个实例.此外,浏览器必须在UIThread上.所以:

是否可以创建多个UI线程(每个表单一个)?

我见过有人这样做([编辑:删除'坏'链接]),但没有人得到他的代码样本工作.让它工作的人最初使用某种形式的自定义消息来做这种事情,但我不知道如何实现这样的事情.

Jul*_*lia 9

我不认为你问的是你想要的,但是每个线程创建一个消息泵很容易,你只需每个线程调用一次Application.Run.

static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Thread t1 = new Thread(Main_);
        Thread t2 = new Thread(Main_);

        t1.Start();
        t2.Start();

        t1.Join();
        t2.Join();
    }

    static void Main_()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }
}
Run Code Online (Sandbox Code Playgroud)