Кросс-поточная операция после использования EventHandler

Мне нужно было создать событие в другом классе, поэтому я использовал EventHandler, и это прекрасно работает, однако теперь в моей основной форме класса, когда я пытаюсь использовать любые элементы управления, которые я получаю:

Cross-thread operation not valid

Итак, после исследования я могу вызвать:

tbMessage.Invoke((Action)delegate
{
      tbMessage.Size = new System.Drawing.Size(500, 60);
      this.Controls.Add(tbMessage);
});

Однако, если бы я делал это по всей форме, было бы множество экземпляров, где я перемещаю, изменяю размеры, изменяю текст для множества элементов управления. Это не кажется правильным, должно быть что-то делать с использованием EventHandle, о котором я не знаю. Эти ошибки не возникали до перемещения некоторого кода в новый класс и использования задач и событий.

Я отписался от события после того, как закончил с и до

dvm.VoltageSet -= dvmVoltageSet;

Есть идеи, пожалуйста?

РЕДАКТИРОВАТЬ:

Я использую фоновый рабочий для обновления пользовательского интерфейса, получая последовательные команды в Form1. В другом классе я использую Task.Run, чтобы установить напряжение + напряжение чтения, пока я не на заданном напряжении. Затем я использую EventHandler для отправки события в Form1, чтобы он знал, что напряжение было установлено, прежде чем перейти к следующему шагу.

RE-EDIT:

Теперь я вижу, что у меня есть два потока Windows.Forms, что вызывает мою ошибку. Это происходит, когда я вызываю метод в другом классе, когда он вызывает событие в form1, и я пытаюсь использовать элемент управления, затем он запускает новый поток.

Not Flagged >   4432    8   Worker Thread   Worker Thread   System.Windows.Forms.dll!System.Windows.Forms.Control.Handle.get    Normal
                    [External Code]  
                    TestSensor.exe!TestSensor.Form1.TestLvdtNull() Line 3113     
                    TestSensor.exe!TestSensor.Form1.dvmVoltageSet(object sender, VoltageEventArgs e) Line 414    
                    TestSensor.exe!TestSensor.DVMLoopRunner.OnNewVoltageSet(VoltageEventArgs e) Line 71  
                    TestSensor.exe!TestSensor.DVMLoopRunner.NewSet.set(bool value) Line 57   
                    TestSensor.exe!TestSensor.DVMLoopRunner.AdjustVoltage() Line 295     
                    TestSensor.exe!TestSensor.DVMLoopRunner.Form1_DVMReadingAvailable(object sender, TestSensor.DVMLoopRunner.DVMReadingAvailableEventArgs e) Line 147   
                    TestSensor.exe!TestSensor.DVMLoopRunner.ReadDVM() Line 192   
                    TestSensor.exe!TestSensor.DVMLoopRunner.ReadDVMWorker() Line 173     
                    TestSensor.exe!TestSensor.DVMLoopRunner.SetVoltage.AnonymousMethod__49_0() Line 95   
                    [External Code]  

Not Flagged     6768    1   Main Thread Main Thread System.Windows.Forms.dll!System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop   Normal
                    [External Code]  
                    TestSensor.exe!TestSensor.Program.Main() Line 17     

Not Flagged     11048   0   Worker Thread   <No Name>       Normal
Not Flagged     668 4   Worker Thread   <No Name>   System.dll!System.IO.Ports.SerialStream.EventLoopRunner.WaitForCommEvent    Normal
Not Flagged     5888    5   Worker Thread   <No Name>   System.dll!System.IO.Ports.SerialStream.EventLoopRunner.WaitForCommEvent    Normal
Not Flagged     12968   0   Worker Thread   <No Name>       Normal
Not Flagged     11924   6   Worker Thread   Worker Thread       Normal

Можно ли сказать компилятору продолжать использовать существующий поток Forms и не начинать новый?

0 ответов

Другие вопросы по тегам