【发布时间】:2015-03-18 10:13:29
【问题描述】:
我有一个问题,不知道如何解决。我要开新帖了:
private void button_Click(object sender, EventArgs e)
{
Thread thrd = new Thread(new ThreadStart(loadingScreenStart));
thrd.Start();
//setting some variables, entering some methods etc...
thrd.Abort();
}
public void loadingScreenStart()
{
splashScreen splashObj = splashScreen.GetInstance();
Application.Run(splashScreen.GetInstance());
}
我有另一种形式:
private static splashScreen m_instance = null;
private static object m_instanceLock = new object();
public static splashScreen GetInstance()
{
lock (m_instanceLock)
{
if (m_instance == null)
{
m_instance = new splashScreen();
}
}
return m_instance;
}
这很好,但是当我第二次点击按钮时,我得到一个异常,即无法访问丢弃的对象。为什么以及如何解决这个问题?我的意思是在线程中止后,我再次点击按钮时会创建一个新线程。
【问题讨论】:
-
我认为你有问题对象不是线程stackoverflow.com/questions/6993407/…
-
你为什么要中止线程?通常应该避免中止线程。只要让线程函数完成执行,它就会消失。关于您的问题,启动画面在执行后永远不会设置为 null,因此句柄被丢弃,您返回它的丢弃实例。
-
我需要中止它。否则它不会关闭(它显示一个加载屏幕)并且我得到错误的值显示
-
@Takeda15 - 中止线程会使您的程序处于未定义状态。只有在强制程序关闭时才应该这样做。
-
这里的主要问题是他在 UI 线程上做繁重的工作,同时试图在辅助 UI 线程上显示启动屏幕。如果把繁重的工作转移到另一个线程上会好很多。
标签: c# multithreading winforms