Afzaal Ahmad Zeeshan
Цитата:
Когда программа выполняет этот код, будет ли он блокировать главное окно программы и препятствовать пользователю выполнять другую работу над программой? Нужно ли пользователю ждать завершения отправки?
OG был немного коротким, длинный ответ заключается в том, что любая операция, требующая операции ввода — вывода — включая, но не ограничиваясь сетевым вводом-выводом, дисковым вводом-выводом и т. д. Даже загрузка растровых изображений изображения будет причиной здесь-всегда приведет к замораживанию вашего приложения. Это происходит потому, что элемент управления был передан сборке, управляющей операцией ввода-вывода, и вашему приложению придется ждать завершения этой операции, прежде чем оно сможет фактически выполнять другие операции, такие как "и особенно" обработка взаимодействия с пользователем. В основном, решение является просто случаем следующей функции-структуры,
public async void IOFunction() {
// Code..
// Almost every object has async functionality in .NET and WinRT
await Obj.DoJobAsync();
// Code.
}
Таким образом, Вы сможете обрабатывать взаимодействие с пользователем и по-прежнему выполнять задачу ввода-вывода на бэкэнде. Это похоже на обладание особыми,
Thread
,
Task
или
BackgroundWorker
объекты, но гораздо более простым способом.
Для большего:
Асинхронное программирование с помощью async и await (C#)[
^]
Цитата:
Должен ли я использовать поток для запуска метода в фоновом режиме или я неправильно понимаю смысл потока? Есть ли другой способ сделать это без блокировки формы?
То, что сказал ОГ, верно, но я не рекомендую полагаться только на это. Вместо этого я бы рекомендовал не использовать
Thread
себя. Вместо этого просто используйте
Task
объект. Моя рекомендация состоит в том, чтобы просто принять асинхронный/ожидающий паттерн программирования. Нет никакой необходимости идти в глубину
Thread
, или с помощью
Task
или с помощью
BackgroundWorker
объект или создать для этого свой собственный механизм. Способ обработки асинхронных задач C#действительно удобен, и я лично наслаждался своей жизнью с тех пор, как начал его использовать.
Оговорка: Шаблон Async/await действительно сложен для начинающих из-за структуры bi-function-declaration. Но как только вы поймете это, это будет удивительно для вас. Забудьте о нитях, вам вообще не нужно их использовать.