我對線程非常陌生,因此我不太確定這是否是一種競爭條件。我使用C#的SerialPort類查詢串行設備中的數據。我通過閱讀互聯網的理解是,當接收到數據的事件被激發時,這個類會產生一個單獨的線程。當程序不讓我設置事件方法中文本框的值時,這似乎得到了確認,因爲控件只能在創建它們的線程中設置。我的問題是,我認爲競爭條件存在於我設置文本框內容的方式中。修復C#競爭條件
使用這種方法
private void btnWidth_Click(object sender, EventArgs e)
{
mySerialManager.ClearErrorQueue();
mySerialManager.WriteLine();
Thread.Sleep(1000);
if (mySerialManager.HasErrors())
{
MessageBox.Show("There was an Error Accessing the Serial Device:\n\r" + PrintAllErrors(mySerialManager), "Serial Device Error");
return;
}
btnSubmit.Enabled = true;
btnSubmit.Select();
txtMeasWidth.Text = myRecievedData.Substring(0, myRecievedData.Length - 1).Trim();
}
我將數據寫入命令到串行設備,然後將文本框的內容。事件處理程序在觸發後設置myRecievedData字符串的值。我的問題是如何確保事件已被觸發,並在寫入文本框之前設置了該字符串的值。我在這個方法的底部做了一個快速修復,但我想確保如果這是一個競爭條件,它會被照顧。
對不起,這是如此漫長的囉嗦。先謝謝您的幫助!
爲什麼這個downvoted?這是一個明確的問題。 –