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

xst*_*ter 1 .net user-interface multithreading delegates invoke

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

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

如何保持线程2的UI不被隐藏?

谢谢

Dal*_*ale 5

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

(在你的主UI类中)

using (YourLoginForm f = new YourLoginForm()){

    YourLoginForm.Show(this)
}
Run Code Online (Sandbox Code Playgroud)

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