大家好,
我有兴趣知道人们对可执行文件概念的看法,该可执行文件负责在自己的线程上启动三个单独的表单。这种方法的主要原因是确保表单不能单独运行,以便我们可以在不使用IPC的情况下在表单之间传递信息。
我对在线程上创建表单的理想位置有点不确定。我假设在自己的线程中创建和显示表单会更好。话虽如此,我不确定这是否正常。我试过但是在表单自己的线程上调用一个跨线程调用不起作用(即BeginInvoke调用没有让它回到另一个线程上的ShowWindow方法)...
private void ShowWindow(string serialNumber)
{
if (this.InvokeRequired)
{
this.BeginInvoke((MethodInvoker)(delegate() { ShowWindow(serialNumber); }));
}
else
{
this.Visible = true;
this.WindowState = FormWindowState.Normal;
if (serialNumber != string.Empty)
{
knavManagement.SelectedPage = knpActivate;
activatePage.SerialNumber = serialNumber;
}
Application.DoEvents();
}
}
我已经尝试了许多不同的方法来在自己的线程上调用该方法,但它们都不起作用,这使我认为它可能与底层线程系统有关,因此我的问题。
三江源!
克里斯。
答案 0 :(得分:2)
Windows Forms必须全部由主UI线程创建。您可以让每个表单生成一个工作线程来执行需要完成的工作。工作线程可以在没有IPC的情况下相互通信,尽管您现在处于必须同步线程间通信的位置。
答案 1 :(得分:0)
感谢您对目前为止的评论。
我发现似乎有效的一种方法是在每个表单上使用Application.Run,我相信它会在自己的UI线程上启动表单。我不太确定这个含义,我会报告回来......
public void StartManagementConsole()
{
ThreadStart start = delegate
{
_managementConsole = new ManagementConsole();
Application.Run(_managementConsole);
};
consoleThread = new Thread(start);
consoleThread.SetApartmentState(ApartmentState.STA);
consoleThread.Start();
}