Çapraz iş parçacığı işlemi geçerli değil: 'textBox1' bir konu oluşturulduğu iş parçacığı dışında başka Erişim Kontrolü
C mikroişlemci kullanarak bir UART sıcaklık değeri göndermek istiyorum# arayüzü ve Ekran sıcaklık *4.* Burada mikroişlemci benim kod:
while(1){
key_scan();// get value of temp
if (Usart_Data_Ready())
{
while(temperature[i]!=0)
{
if(temperature[i]!=' ')
{
Usart_Write(temperature[i]);
Delay_ms(1000);
}
i = i 1;
}
i =0;
Delay_ms(2000);
}
}
ve benim C# kodu
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
txt = serialPort1.ReadExisting().ToString();
textBox1.Text = txt.ToString();
}
ama durum orada doğar "Çapraz iş parçacığı işlemi geçerli değil: Kontrol 'textBox1' bir iş parçacığı iş parçacığı dışındaki erişilen oluşturulduğu" Lütfen benim mikroişlemci sıcaklık dize nasıl söyle ve bu Hatayı düzeltin!
CEVAP
Veri serialPort1_DataReceived
yöntem alınan UI iş parçacığı dışında başka bir iş parçacığı içeriği geliyor ve bu hatayı görmek nedeni budur.
Bu sorunu çözmek için, TechNet makalesinde descibed gibi bir dağıtıcı kullanmak zorunda olacak:
How to: Make Thread-Safe Calls to Windows Forms Controls
Doğrudan metin özelliği serialport1_DataReceived
yöntemi ayarlamak yerine, bu deseni kullanın:
delegate void SetTextCallback(string text);
private void SetText(string text)
{
// InvokeRequired required compares the thread ID of the
// calling thread to the thread ID of the creating thread.
// If these threads are different, it returns true.
if (this.textBox1.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] { text });
}
else
{
this.textBox1.Text = text;
}
}
Senin durumunda:
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
txt = serialPort1.ReadExisting().ToString();
SetText(txt.ToString());
}
Çapraz iş parçacığı işlemi geçerli değ...
Görev.Fabrika.() StartNew çağıran iş p...
C başka bir iş parçacığı GUI güncelleş...
Neden “while(true)” “Parçacığı.olmadan...
'geri gönderme İşlemi sırasında n...