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控件需要在单独的线程上运行。任何帮助将非常感激!
听起来你想要多个应用程序域…
也许这可能会有帮助…
http://denisvuyka.wordpress.com/2007/10/17/make-a-really-dynamic-plugin-using-multiple-application-domains/