我正在制作一个程序,一次运行多个Shockwave flash控件。 由于闪存的性质和性能,我无法在同一个UI线程上运行所有控件。
我解决这个问题的方法是创建子窗体,每个窗体都有自己的闪存控件,并在新线程上运行它们。我是通过以下方式做到的:
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
}
}
只需使用“退出”按钮关闭表单,就会在第一个代码段中使用的ShowDialog()函数中导致交叉线程异常。
我需要知道,有没有其他方法可以实现我的需要?最终,闪存控件需要在不同的线程上运行。任何帮助将不胜感激!
答案 0 :(得分:0)
听起来你想要多个应用领域......
也许这可能会有所帮助......