Почему Thread.Join () НЕ вешает мое приложение при вызове в потоке пользовательского интерфейса?

В моем понимании (я плохо разбираюсь в потоках), Join () блокирует вызывающий поток до тех пор, пока поток, для которого вызывается Join (), не вернется.

Если это так, и метод Join () вызывается из потока пользовательского интерфейса, создание нового потока для какой-либо длительной операции не имеет смысла. Есть вопросы по ТА, которые спрашивают, почему Join () вешает приложение. Это выглядит естественно для меня.

Кстати, даже если это выглядит естественно, мое приложение не ведет себя соответственно. Это не вешает мое приложение.

Код без потока, который вешает приложение: -

string retValue = "";
retValue = LongRunningHeavyFunction();
txtResult.Text = retValue;

Код с потоком, который НЕ вешает приложение: -

string retValue = "";
Thread thread = new Thread(
() =>
{
    retValue = LongRunningHeavyFunction();
});
thread.Start();
thread.Join();
txtResult.Text = retValue;

Выше код прекрасно работает без зависания приложения. Вызов функции занимает около 15-20 секунд. Почему приложение не зависает?

Это не проблема для меня; на самом деле это хорошие новости. Но я просто не понимаю, какая разница? Это не соответствует тому, что я читаю и изучаю.

Я использую DotNet Framework 4.0, если это имеет значение.

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

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