我有一个问题,不知道如何解决。我正在开始一个新的线程:
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;
}这很好用,但是当我第二次点击按钮时,我得到一个异常,那就是无法访问被丢弃的对象。为什么以及如何解决这个问题?我的意思是,在线程中止后,我会在再次点击按钮时创建一个新的线程。
发布于 2015-03-18 18:23:19
Thread thrd = new Thread(new ThreadStart(loadingScreenStart));
thrd.Start();
//setting some variables, entering some methods etc...
thrd.Abort();为什么要调用thrd.Abort()?你知道线程结束了吗?您必须等待线程完成。并在这里使用双重检查
public static splashScreen GetInstance()
{
if (m_instance == null)
{
lock (m_instanceLock)
{
if (m_instance == null)
{
m_instance = new splashScreen();
}
}
}
return m_instance;
}也许当你调用Run splashscreen时,它已经被释放了。尝试创建它并将其捕获到一个字段,然后将其传递给您的方法。尝尝这个。
Task.Run(() =>
var splashObj = splashScreen.GetInstance();
Application.Run(splashObj);
}));https://stackoverflow.com/questions/29119248
复制相似问题