На данный вопрос уже ответили:
Есть реализация класса купюроприемника(dll). Я читаю его статус и хочу на форме выводить его в TextBox. После чтения статуса я хочу вызвать событие в котором и записать в TextBox значение.
public event EventHandler GetStatus;
......
public async Task StartCommunication()
{
await Task.Run(() => StartProccess(token), token);
}
private void StartProccess(CancellationToken token)
{
byte resultStatus;
resultStatus = Reset();
Task.Delay(200);
resultStatus = SetSequrity();
while (!token.IsCancellationRequested)
{
resultStatus = StatusRequest();
OnGetStatus(new BillEventArgs(resultStatus));
Task.Delay(200);
}
}
....
protected void OnGetStatus(BillEventArgs e)
{
GetStatus?.Invoke(this, e);
}
На форме делаю так
private async void button11_Click(object sender, EventArgs e)
{
bill.GetStatus += Bill_GetStatus;
await bill.StartCommunication();
}
private void Bill_GetStatus(object sender, EventArgs e)
{
var eventArg = e as BillEventArgs;
textBox3.Text = eventArg.Status.ToString();
}
но при возникновении события вылетает ошибка на строке
textBox3.Text = eventArg.Status.ToString();
System.InvalidOperationException: "Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'textBox3' не из того потока, в котором он был создан
Как правильно организовать доступ к контролам на форме в такой ситуации?
Для доступа к контролу из другого потока можно использовать Form.Invoke()
- этот метод выполняет указанный делегат в том потоке, в котором была создана форма. Например, так:
private void Bill_GetStatus(object sender, EventArgs e)
{
var eventArg = e as BillEventArgs;
this.Invoke(new MethodInvoker(() =>
{
textBox3.Text = eventArg.Status.ToString();
}));
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Как реализовать с помощью c#, сортировкутекста из txt файла, а именно, открыть файл txt я знаю как, но как отсортировать слова, которые найду в нем,...
При компиляции цикл не выполняется так как задуманоПодскажите где опечатка или недочёт