Я хочу убедиться, что когда мое приложение завершает работу, закрываются все открытые темы. Однако, когда я пытаюсь это сделать, я получаю сообщение об ошибке, указывающее, что нет ссылочного объекта для того, что я пытаюсь сделать, даже если это все в одном классе.Закрытие потоков в Unity с помощью 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);
}
}
Что я делаю неправильно? Потоки открываются и делают то, что они предполагают, просто отлично, но по какой-то причине я не могу их закрыть.
Мое тестирование (с Unity 5.2 на Windows 7 64-bit) указывает на то, что thread.Abort не работает в Unity, если нить, которая прерывается, не сработает в какой-то момент. Если ваш метод ListenForClients включает Thread.Sleep (0) в своем основном цикле, то Abort должен работать. (Хотя вы не получите ThreadAbortException, что является еще одной ошибкой ...). – yoyo