Я использую нить, написанную в другом классе для обновления метки. Метка - это содержимое в основном классе Winform.Обновить ярлык из другого потока
Scanner scanner = new Scanner(ref lblCont);
scanner.ListaFile = this.listFiles;
Thread trd = new Thread(new ThreadStart(scanner.automaticScanner));
trd.IsBackground = true;
trd.Start();
while (!trd.IsAlive) ;
trd.Join();
Как вы можете видеть, я передаю ссылку метки в конструктор второго класса. Во втором классе (Scanner) я метод, называемый «automaticScanner», который должен обновить ярлык с этим кодом:
public Scanner(ref ToolStripStatusLabel _lblContatore)
{
lblCounter= _lblContatore;
}
Thread threadUpdateCounter = new Thread(new ThreadStart(this.UpdateCounter));
threadUpdateCounter.IsBackground = true;
threadUpdateCounter.Start();
while (!threadUpdateCounter .IsAlive) ;
threadUpdateCounter.Join();
private void AggiornaContatore()
{
this.lblCounter.Text = this.index.ToString();
}
Я получаю эту ошибку при обновлении метки:
Неверная операция поперечного потока: элемент управления «Основной» доступен из потока, отличного от потока, который был создан на
Я использую .net 4 с Winform C#.
Большое спасибо за ответы.
News: Проблема эта линия:
trd.Join();
Эта линия блокировать мой GUI и Lable не обновлять. Есть способы контролировать финишную нить и обновлять этикетку до конца? Thanks
, но ... его правильно вызова нити в этом режиме? Тема trd = new Тема (новый ThreadStart (scanner.scansioneAutomatica)); trd.IsBackground = true; trd.Start(); while (! Trd.IsAlive); trd.Join(); В этом режиме графический интерфейс заблокирован! : S – Antonio
Включить внутри класса код Action y; и функция для посещения таймера прошедшего события private void T_Elapsed (отправитель объекта, System.Timers.ElapsedEventArgs e) { C++; // делегат - это выражение «y =() => label1.Text = c.ToString()» label1.Invoke (y =() => label1.Text = c.ToString()); } –