我想确保当我的应用程序退出任何和所有打开的线程都关闭时。然而,当我尝试这样做时,我得到错误告诉我,我正在尝试做的事情没有参考对象,即使它们都在同一个类中。
有人可以帮帮我吗?
开始/打开线程:
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);
}
}
我做错了什么?线程打开并做他们认为很好的事情,但由于某种原因我无法关闭它们。
答案 0 :(得分:2)
你不应该强迫一个帖子到Abort
,在这个主题的SO和网站上有很多好的答案,例如:
相反,您应该实现一个cancalation模式,例如通过Task
或BackgroundWorker
类。在这种情况下,你基本上会说:“停止或破坏你做的任何事情,只需退出方法”。您还可以推出自己的实现:查询volatile bool或使用事件句柄,但可能会坚持已有的解决方案。有关this answer的更多信息。