我真的不明白这个错误是如何发生在这段代码上的。请检查代码自己试图读取或写入受保护的内存。这通常表明其他内存已损坏
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