void itemCommand_Click(Office.CommandBarButton Ctrl, ref bool CancelDefault)
{
var thread = new Thread(() =>
{
if (LoginCheck())
{
ItemWindow itw = new ItemWindow();
//Dispatcher.CurrentDispatcher.Invoke((System.Action)(() =>
//{
itw.Show();
itw.Closed += (sender2, e2) => { itw.Dispatcher.InvokeShutdown(); };
//}));
Dispatcher.Run();
}
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
}
我不斷收到錯誤消息「調用線程無法訪問此對象,因爲不同的線程擁有它」。在線「itw.show();」當這個函數調用兩次時。對於第一次調用它可以正常工作,並且在窗口關閉並嘗試再次打開後,它會失敗。正如我註釋了「Invoke」方法,它也不適用於Dispatcher。請幫我找到解決方案。 謝謝。WPF新窗口創建新線程錯誤
-----------------編輯
爲什麼我創建一個新的線程,是因爲它是一個Excel插件的原因。如果我從主線程創建它們,我無法從主線程創建窗口,這是與Windows發生衝突的Excel。
我不明白的是,爲什麼來自新線程的新實例(ItemWindow)與舊線程相沖突。
爲什麼要創建一個新線程來顯示此窗口?這通常不是一個好主意。其次,我已經嘗試過了,它工作正常(除非我不知道「LoginCheck」是什麼)。例外發生在哪裏? –
所有與UI相關的代碼都必須在主線程中運行。你想在這裏做什麼? – almulo
通常,此錯誤是指您嘗試訪問您已從第一個表單中刪除的第一個表單上的屬性。我們實際上必須看到導致問題的第二種形式會發生什麼。 – DoomVroom