【问题标题】:Does a thread close automatically?线程会自动关闭吗?
【发布时间】:2010-12-28 07:56:19
【问题描述】:

我正在使用 gmail 类,以便我的应用可以通过 gmail 向我发送通知。

这样做是这样的:

public static void SendMessage(string message)
{
    Notification.message = message;

    Thread t = new Thread(new ThreadStart(SendMessageThreaded));
    t.Start();
}

线程函数如下所示:

private static void SendMessageThreaded()
{
    try
    {
        if (Notification.message != "")
            RC.Gmail.GmailMessage.SendFromGmail("accname", "accpass", "email", "subject", Notification.message);

        Notification.message = "";
    }
    catch
    { }
}

所以SendMessageThreaded 运行后,它是自行关闭还是我必须关闭

t.Start()
t.Abort()

还是什么?

【问题讨论】:

    标签: c# multithreading


    【解决方案1】:

    线程需要启动一次——此时它将执行分配给它的代码块并退出。

    在大多数情况下,您不需要显式清理线程(例如,除非您想提前退出)

    【讨论】:

      【解决方案2】:

      是的,线程自行关闭。

      此时在第二个线程上运行的方法中的所有指令都已被调用。

      【讨论】:

        【解决方案3】:

        是的,当然。它会在结束时自行关闭。

        【讨论】:

          【解决方案4】:

          一旦SendFromGmail 完成,线程将超出范围并可供垃圾回收。

          是的,它会自动关闭。

          【讨论】:

            【解决方案5】:

            不需要,它会返回线程池等待其他任务,如果没有它会杀死自己。

            【讨论】:

              【解决方案6】:

              是的,它会关闭,但是如果主线程在第二个线程等待它时崩溃,你应该超时以避免僵尸。

              【讨论】:

                【解决方案7】:

                Abort() 方法抛出一个您可以处理的ThreadAbortException

                public void SendMessageThreaded()
                {
                    try
                    {
                        // thread logic
                    }
                    catch (ThreadAbortException tae)
                    {
                        // thread was aborted, by t.Abort()
                    }
                    catch (Exception ex)
                    {
                        // other error
                    }
                }
                

                通过使用

                t.Abort(myObject)
                

                您可以“发送”任何帮助您处理中止处理的对象。您可以使用ExceptionState 属性来访问该对象。

                【讨论】:

                  猜你喜欢
                  • 2020-07-19
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2021-12-16
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多