c# -在单独的线程上正确运行控件或窗体

本文关键字:运行 控件 窗体 单独 线程 | 更新日期: 2023-09-27 18:14:02

我正在编写一个程序,该程序将同时运行多个冲击波闪光控制。由于flash的性质和它的性能,我不能让所有的控件在同一个UI线程上运行。

我想要解决这个问题是创建子窗体,每个窗体都有自己的flash控件,并在新线程上运行它们。我通过:

for (int i = 0; i < numClients; i++)
        {
            Thread clientThread = new Thread(new ThreadStart(() =>
                {
                    FrmClient c = new FrmClient();
                    c.ShowDialog();
                }));
            clientThread.IsBackground = true;
            clientThread.SetApartmentState(ApartmentState.STA);
            clientThread.Start();
        }

然而,这个设置是如此的不稳定和hacky,它甚至不是有趣的。交叉线程异常被左右抛出。

我调用表单来正确地访问它的成员,但是如果不调用,表单甚至不能访问它自己的成员,例如:

public partial class FrmClient : Form
{
    public FrmClient()
    {
        InitializeComponent();
        this.Shown += new FormShownEventHandler(Shown);
    }  
    void Shown(object sender, EventArgs e)
    {
         this.WindowState = FormWindowState.Maximized;
         // ^ CrossThreadException
         this.Invoke(new MethodInvoker(() =>
              { 
                   this.WindowState = FormWindowState.Maximized;
              }));
         // Works
     }
 }

使用Exit按钮关闭表单会导致第一个代码片段中使用的ShowDialog()函数出现跨线程异常。

我想知道,是否有其他方法可以达到我的需要?最终,flash控件需要在单独的线程上运行。任何帮助将非常感激!

c# -在单独的线程上正确运行控件或窗体

听起来你想要多个应用程序域…

也许这可能会有帮助…

http://denisvuyka.wordpress.com/2007/10/17/make-a-really-dynamic-plugin-using-multiple-application-domains/