调用UI委托会导致UI被隐藏

时间:2009-10-25 05:48:17

标签: .net multithreading user-interface delegates invoke

假设我有线程1,主窗口UI线程和线程2,一个模态形式的登录UI线程。

现在,线程1执行一段代码,并希望更改登录表单中的UI元素,以便调用委托来更改线程2中的内容。但是当它这样做时,登录表单将隐藏在主窗口后面,我无法把它带回来。在任务栏上选择它并没有做任何事情,并且在被调用方法的末尾写“Activate()”也没有做任何事情。

如何防止线程2的UI被隐藏?

由于

2 个答案:

答案 0 :(得分:5)

在调用更新主窗口后,在登录表单上调用Focus()。此外,当您显示登录表单的父窗口时,它可能有助于将其设置为主窗口。

(在您的主UI类中)

using (YourLoginForm f = new YourLoginForm()){

    YourLoginForm.Show(this)
}

另一种方法可能是使用ShowDialog()而不是Show(),并使您的登录表单返回不同的DialogResult,具体取决于登录是否成功。 ShowDialog()应该自动将您的登录表单设置为模态并具有焦点。

答案 1 :(得分:0)

哇....自我嘘声。 k,消失的第二个窗口事物是一个非问题

但是评论中的问题仍然存在...... 当我在第二个线程中执行ShowDialog时,如何防止新窗口与主窗口分开操作?即我不希望用户在第二个窗口后面最小化主窗口。如果另一个程序出现在顶部并隐藏所有内容,单击任务栏中的主窗口图标必须打开第二个窗口等等