用C#关闭Unity中的线程

时间:2013-09-27 10:11:22

标签: c# multithreading unity3d

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

有人可以帮帮我吗?

开始/打开线程:

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

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

1 个答案:

答案 0 :(得分:2)

你不应该强迫一个帖子到Abort,在这个主题的SO和网站上有很多好的答案,例如:

相反,您应该实现一个cancalation模式,例如通过TaskBackgroundWorker类。在这种情况下,你基本上会说:“停止或破坏你做的任何事情,只需退出方法”。您还可以推出自己的实现:查询volatile bool或使用事件句柄,但可能会坚持已有的解决方案。有关this answer的更多信息。