1
창 안의 백그라운드에서 다른 창을로드하려고했습니다. 부모 창이 스플래시 화면으로 작용합니다. 내 경우에는입니다. 다른백그라운드에서 다른 창을로드하십시오. 렌더링 될 때 부모 창을 닫습니다.
InitWindow I = null;
public InitWindow()
{
InitializeComponent();
I = this;
Thread T = new Thread(() =>
{
MainWindow M = new MainWindow();
M.Show();
M.ContentRendered += M_ContentRendered;
System.Windows.Threading.Dispatcher.Run();
M.Closed += (s, e) => M.Dispatcher.InvokeShutdown();
}) { IsBackground = true, Priority = ThreadPriority.Lowest };
T.SetApartmentState(ApartmentState.STA);
T.Start();
}
void M_ContentRendered(object sender, EventArgs e)
{
I.Close();
}
모든 것이 잘 작동하지만에서 잘못된 연산 예외를 throw : 다른 스레드가 그것을 소유하고 있기 때문에이 개체에 액세스 할 수 없습니다
I.Close();
호출 스레드.
1) 어떻게 스레드를 전환/동기화합니까?
2) 더 좋은 해결책이 있습니까?
대화 형 스플래시 화면의 경우 백그라운드에서로드 및 설정을 수행 한 다음 작업을 완료 한 후에 창 내용을 전환하십시오. –
@ PatrykĆwiek 사용해야하는 두 개의 창 대신 하나 하나? – Umayr
예, 내용을 먼저 표시하고로드를 한 다음 기본 창 내용을 표시하려는 내용으로 전환하십시오. 물론 인터랙티브 * 스플래시 화면에 유용합니다. 이미지가있는 경우 빌드 액션을 '스플래시 화면'으로 설정하면 문제없이 마술을 해결할 수 있습니다. –