1
我想确保当我的应用程序退出任何和所有打开的线程都关闭。然而,当我尝试这样做时,我得到了错误,告诉我没有任何参考对象用于我正在尝试做的事情,即使它们都在同一个类中。在C中关闭线程与C#
有人可以帮我吗?
启动/打开线程:
Thread listen_thread;
TcpListener tcp_listener;
Thread clientThread;
// Use this for initialization
void Start()
{
IPAddress ip_addy = IPAddress.Parse(ip_address);
tcp_listener = new TcpListener(ip_addy, port);
listen_thread = new Thread(new ThreadStart(ListenForClients));
listen_thread.Start();
Debug.Log("start thread");
}
然后我尝试在关闭它们:
void OnApplicationQuit()
{
try
{
clientThread.Abort();
tcp_listener.Stop();
listen_thread.Abort();
}
catch(Exception e)
{
Debug.Log(e.Message);
}
}
我在做什么错?线程打开并做他们想要的事情,但由于某种原因,我无法关闭它们。
我的测试(在Windows 7 64位上使用Unity 5.2)表明,thread.Abort在Unity中不起作用,除非被中止的线程在某个时刻休眠。如果您的ListenForClients方法在其主循环中包含一个Thread.Sleep(0),那么Abort应该可以工作。 (虽然你不会得到一个ThreadAbortException,这是另一个bug ...)。 – yoyo