Чтобы закрыть его должным образом, вы даете ему сигнал прекратить то, что он делает, вызывая метод или устанавливая свойство, затем выполняйте Thread.Join, чтобы дождаться его закрытия, прежде чем закрывать приложение или переходить к другим задачам.

ал на разных сайтах, что Thread.Abort не очень хорош в использовании. В этом случае, как реализовать шаблон тайм-аута? Например, я читал, что MS использует шаблон ниже (который я обернул в методе расширения) по всей структуре. Лично я думаю, что это довольно классное расширение, но я беспокоюсь о Thread.Abort. У кого-нибудь есть способ получше?

 public static bool CallandWait(this Action action, int timeout)
    {
        Thread subThread = null;
        Action wrappedAction = () =>
        {
            subThread = Thread.CurrentThread;
            action();
        };

        IAsyncResult result = wrappedAction.BeginInvoke(null, null);

        if (((timeout != -1) && !result.IsCompleted) && (!result.AsyncWaitHandle.WaitOne(timeout, false) || !result.IsCompleted))
        {
            if (subThread != null)
            {
                subThread.Abort();
            }

            return false;
        }
        else
        {
            wrappedAction.EndInvoke(result);
            return true;
        }
    }

Ответы на вопрос(1)

Ваш ответ на вопрос