1

我想确保当我的应用程序退出时,所有打开的线程都已关闭。但是,当我尝试这样做时,我收到错误消息,告诉我我正在尝试做的事情没有参考对象,即使它们都在同一个类中。

有人可以帮我吗?

开始/打开线程:

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);
    }
}

我究竟做错了什么?线程打开并做他们认为很好的事情,但由于某种原因我无法关闭它们。

4

1 回答 1

2

你不应该强迫一个线程Abort,在这个主题的其他地方有很多关于 SO 和 web 的好答案,例如:

相反,您应该实现一个 cancalation 模式,例如 viaTaskBackgroundWorkerclasses。在这种情况下,您基本上会说:“停止或中断您所做的任何事情,然后退出该方法”。您还可以推出自己的实现:查询 volatile bool 或使用事件句柄,但可能坚持现有的解决方案。此答案中的更多信息。

于 2013-09-27T10:17:53.993 回答