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