【发布时间】:2018-02-02 13:39:35
【问题描述】:
关于这个问题的另一个问题。相信我已经彻底调查过,但仍然没有找到适合我的应用的解决方案。
简介: 我的应用程序由一个主表单和几个表单组成,它们在需要时显示为模态。 然后我有一个“屏幕转储”表单,它是一个带有按钮的小表单。按下此按钮时,屏幕会转储屏幕。
以上所有的表单都是通过在主表单上按相应的按钮来显示的。
我想要什么: 显示时,屏幕转储表单应始终位于我的应用程序的所有其他窗口(也显示为 ShowModal() 的窗口)的顶部。如果这自动意味着在所有其他程序之上也是可以接受的。
我尝试过的: 我很确定我必须在单独的线程中打开表单,以便即使在其他表单显示为模态时也能保持它的可操作性。 这个我试过如下:
private void btnScreenDump_MouseDown(object sender, MouseEventArgs e)
{
Thread thread = new Thread(ThreadProc);
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
}
private void ThreadProc()
{
using (FormScreenDump frmScreenDump1 = new FormScreenDump())
{
frmScreenDump1.TopMost = true;
Application.Run(frmScreenDump1);
}
}
有什么问题/疑问? 问题一: frmScreenDump1 形式根本不是最顶层的。每当在我的应用程序中单击任何其他表单时,表单 frmScreenDump1 都会位于应用程序后面。 为什么当 frmScreenDump1.TopMost = true; 时表单不在最顶层,我必须更改什么才能获得这种行为?
问题 2: 我希望窗体 frmScreenDump1 在主窗体关闭时自动关闭。当这个表单在单独的线程上运行时,我应该怎么做?
非常感谢任何帮助!
【问题讨论】:
标签: c# multithreading winforms