【发布时间】:2020-07-03 11:53:51
【问题描述】:
我有一个登录表单,它启动了一个讲师窗口的对话框
当交换窗口时,它看起来像这样:
//LoginWindow to LecturerClient
this.Visibility = Visibility.Collapsed;
LecturerWindow lecturerClient = new LecturerWindow(self);
lecturerClient.Owner = this;
lecturerClient.ShowDialog();
this.Visibility = Visibility.Visible; // so when the lecturerClient dialogs exits - the login form will be visible
我的 LecturerWindow 还会打开另一个对话框:
//LecturerClient To Session
Dispatcher.Invoke(() =>
{
Visibility = Visibility.Collapsed;
Session newSession = new Session(mySelf, Courses.Find(item => item.courseId == courses[1].ToString()));
newSession.Owner = this;
newSession.ShowDialog();
Visibility = Visibility.Visible;
});
当我的会话对话框关闭并且突然我的 LoginWindow 和我的 LecturerWindow 都变为可见时,问题就开始了,就像我的 LoginWindow 认为会话关闭是 LecturerWindow 关闭
提前谢谢你!
【问题讨论】:
-
我无法准确解释这是为什么,但
Dispatcher.Invoke是导致问题的原因。我能够重现您的问题,并删除该行修复它。不过,不确定您将其用于什么目的,因此删除它可能不是一种选择。 -
那么从线程控制 ui 元素的替代方法是什么?
-
这取决于,您使用哪个类进行多线程处理? (即Task、BackroundManager等)
标签: c# wpf dialog window visibility