Подтвердить что ты не робот

Закрывается ли поток автоматически?

Я использую класс 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()

или что-то?

4b9b3361

Ответ 1

Поток должен запускаться один раз - в этот момент он будет выполнять назначенный ему блок кода и выйти.

Вам не нужно явно очищать поток в большинстве случаев (если вы не хотите, чтобы вы заработали раньше, например)

Ответ 2

Да, поток закрыт сам по себе.

Вот когда были вызваны все инструкции в методе, запущенные в потоке secodn.

Ответ 3

да, определенно. он закроется, когда он закончится.

Ответ 4

Поток выходит из области видимости и будет доступен для сбора мусора, как только заканчивается SendFromGmail.

Итак, да, он автоматически закрывается.

Ответ 5

Нет необходимости, он вернется обратно в пул потоков и ждет другую задачу, если никто не убьет сам.

Ответ 6

Метод 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 для доступа к этому объекту.

Ответ 7

Да, он закроется, но вам нужно только тайм-аут, чтобы избежать зомби в любом случае, если основной поток выйдет из строя, пока второй поток ждет его.