Я новичок в Async и Await и создал простой проект, чтобы понять, как он работает.Для этого у меня есть простое приложение Windows Form, которое имеет 2 элемента:
- Кнопка Получить завершенные элементы
- Текстовое поле, отображающее все полученные завершенные элементы
КогдаЯ нажимаю кнопку, она должна отображать все завершенные элементы в TextBox.Это код, который я написал:
private async void btnGetCompletedItems_Click(object sender, EventArgs e)
{
QueueSystem queueSystem = QueueSystem.NewInstance(75);
Stopwatch watch = new Stopwatch();
watch.Start();
await Task.Run(() => GetCompletedItems(queueSystem));
watch.Stop();
lblTime.Text = $"{watch.ElapsedMilliseconds.ToString()} ms";
}
private void GetCompletedItems(QueueSystem queueSystem)
{
foreach (var item in queueSystem.GetCompletedItems())
{
txtItems.Text += $"{txtItems.Text}{item.ItemKey}{Environment.NewLine}";
}
}
Однако я получаю ошибку в
txtItems.Text + = $ "{txtItems.Text} {item.ItemKey} {Environment.NewLine} ";
В сообщении об ошибке указывается
Дополнительная информация: операция между потоками недопустима: элемент управления 'txtItems' доступен из потока, отличного от потокапоток, в котором он был создан.
Я зарегистрировался в Debug, и был создан новый поток для GetCompletedItems ().Когда я читал об Async и Await, я читал, что он не обязательно создает новый поток, но, кажется, по какой-то причине он создал новый.
Является ли моя реализация и понимание Async иЖдешь неправильно?Можно ли использовать Async и Await в приложении Windows Forms?