剧情简介:我在做什么线程错误?
我试图将非线程应用程序转换为线程应用程序。我在大约10年的时间里没有在应用程序中使用线程,并且对这个概念非常生疏。这只是我没有抓住的东西。你能看看我的(很短的)代码之前和之后,看看我做错了什么,为什么它是错的?所有帮助非常感谢!谢谢!
错误看出:
我的代码没有响应。我可以运行并执行这些按钮来启动应用程序,但不会启动一个新线程而只是工作,它们会冻结并显示“无响应”消息。我不确定我做错了什么。我是否错误地实现了线程?
非线程代码:
//this opens the user input windows form
private void UserInputButton_Click(object sender, EventArgs e)
{
enumerationStation EnumerationForm = new enumerationStation();
EnumerationForm.Show();
//userform UserForm = new userform();
//UserForm.Show();
}
//this opens the correlationApplication windows form
private void CorrelationApplication_Click(object sender, EventArgs e)
{
CorrelationApplication CorrelationApplicationForm = new CorrelationApplication();
CorrelationApplicationForm.Show();
}
破碎线程代码:
//this opens the user input windows form
private void UserInputButton_Click(object sender, EventArgs e)
{
BackgroundWorker bg = new BackgroundWorker();
bg.DoWork += new DoWorkEventHandler(enumerationStuff);
bg.RunWorkerAsync();
}
//run enumeration application in new thread
private void enumerationStuff(object sender, DoWorkEventArgs e)
{
enumerationStation EnumerationForm = new enumerationStation();
EnumerationForm.Show();
}
//this opens the correlationApplication windows form
private void CorrelationApplication_Click(object sender, EventArgs e)
{
BackgroundWorker bg = new BackgroundWorker();
bg.DoWork += new DoWorkEventHandler(correlationStuff);
bg.RunWorkerAsync();
}
//run correlation application in new thread
private void correlationStuff(object sender, DoWorkEventArgs e)
{
CorrelationApplication CorrelationApplicationForm = new CorrelationApplication();
CorrelationApplicationForm.Show();
}
简单的回答:不要这样做。使用线程进行昂贵的计算。使用TPL。 – SLaks 2012-08-01 13:10:40
我敢肯定,从UI线程中打开新的UI形式是一个坏主意。 – asawyer 2012-08-01 13:12:38
另外,好像你是从backgroundworker调用UI方法:'EnumerationForm.Show();'。这应该会为您弹出一个例外。您应该只在主线程上使用UI方法,并使用其他线程来完成与其他线程无关的其他任务。 – devundef 2012-08-01 13:13:52