我真的不明白這個錯誤是如何發生在這段代碼上的。請檢查代碼自己試圖讀取或寫入受保護的內存。這通常表明其他內存已損壞
void dispatcherTimer_Tick(object sender, EventArgs e)
{
string srUrl = lstLocalIndex[irLocalIndex] + lstMainIndex[irMainIndex].Replace("0;","");
Task.Factory.StartNew(() =>
{
startNewWindow(srUrl);
});
}
void startNewWindow(string srUrl)
{
NewWindowThread<TitleWindow, string>(c => new TitleWindow(c), srUrl);
}
下面這段代碼是在錯誤發生。我也將附上截圖
private void NewWindowThread<T, P>(Func<P, T> constructor, P param) where T : Window
{
Thread thread = new Thread(() =>
{
T w = constructor(param);
w.Show();
w.Closed += (sender, e) => w.Dispatcher.InvokeShutdown();
try
{
System.Windows.Threading.Dispatcher.Run();
}
catch
{
}
});
thread.SetApartmentState(ApartmentState.STA);
try
{
thread.Start();
}
catch
{
}
}
此錯誤會導致整個軟件拋出錯誤而停止工作,即使我打電話他們在新的線程:(
此行拋出錯誤System.Windows.Threading.Dispatcher。運行();
請檢查還截圖
C#4.0 WPF
實際上,您使用*兩個*線程,即Task中的線程,然後是Thread線程,最好將您想要作爲啓動代碼運行的代碼放在Thread中。 – casperOne 2012-04-02 19:40:19
@casperOne我也試過這個應用程序崩潰。過了一段時間後,這種情況不會立即發生。它運行30分鐘然後崩潰。崩潰時間改變。 – MonsterMMORPG 2012-04-02 19:41:53
不,他們說你的記憶被打破了。它一定是如此! (順便說一句,這是我遇到'未指定的錯誤'後遇到的最愚蠢的錯誤消息)。 – leppie 2012-04-02 19:53:02