내가 겪고있는 문제에 대해 누군가 알릴 수 있습니까?Dispatcher.BeginInvoke()의 동작에 혼란이 있음
저는 wpf 프로젝트에서 작업하고 있습니다. 시나리오는 다음과 같습니다 :
기본 UI 스레드에서 창 (모델 창)을 팝업 한 다음 닫아야합니다. 이러한 작업은 다른 UI 스레드 (사용자가 기본 UI 창을 클릭하지 못하도록)에서 시작됩니다. 그런 다음이 창을 닫습니다. 주 코드가 아래에 표시됩니다. 그리고 그것은 작동합니다.
ShowDialog()
반환하기 전에 가까운 방법을 excuted 얻을 것이라고 알고 (적어도이 UI 스레드 경우, 디스패처없이 코드를 의미합니다), 누구 멀티 스레드 경험이 있습니까?
Window window;
private void Button_Click(object sender, RoutedEventArgs e)
{
Thread thread = new Thread(() =>
{
//create a window and let user work from this thread
//code is omitted.
//create another window on main UI thread
Application.Current.Dispatcher.BeginInvoke(new Action(() =>
{
window = new Window();
window.ShowDialog();
}));
//do some work here
Thread.Sleep(1000);
Application.Current.Dispatcher.BeginInvoke(new Action(() =>
{
//Thread.Sleep(1000);
window.Close();
}));
});
thread.Start();
}
감사합니다.
실제로 어떻게 작동하는지 이해하는 데 도움이되는 설명을 해주셔서 감사합니다! 실제로 showdialog 코드를 살펴 보았지만 ComponentDispatcher.PushModal처럼 이해하기 어려운 것이 있습니다. 나는 그것을 벨로우즈에 게시합니다. 제발 좀 도와 주시겠습니까? – xiaoheixiaojie