從條形碼掃描儀獲取一些數據後嘗試打開新窗體時遇到問題。這個想法是通過打開serialPort和使用DataReceived事件讀取數據的Main窗體。當那一刻發生時,我想打開新窗體並將其傳遞給它。 (理想狀態是通過的SerialPort所以這將是手術有太多)從串口獲取數據後打開新窗體
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
string barcode = serialPort1.ReadExisting();
if (this.InvokeRequired)
{
this.Invoke(new SetCallBack(SetText), new object[] { barcode });
}
}
delegate void SetCallBack(string text);
private void SetText(string text)
{
Form2 frm = new Form2(text, serialPort1);
frm.ShowDialog();
serialPort1.DiscardInBuffer();
}
它工作正常,一次或兩次,但該控件凍結後。當我更改代碼到
frm.Show();
它工作沒有問題(或至少它們不可見)。 .ShowDialog()會導致死鎖嗎?
//注意,我也取從數據庫中一些數據是這裏沒有顯示,但它也可能引起問題的
有人建議我不要用DataReceive事件的而不是建立一個定時器(〜 250ms)並檢查ByteToRead屬性,但我遇到了同樣的問題。
我也會堅持使用Form.Show()的工作版本,但不幸的是我需要那個對話框是模態的。
如果你有什麼想法可能會問題,我會很高興。 提前謝謝!
你關閉窗體,掃描條形碼,關閉窗體,掃描另一條碼,關閉窗體並最終停止工作?或者當表單已經打開時你是否掃描條形碼? – Matt
@Matt運行應用程序,掃描條形碼 - >第二種形式打開。關閉第二張表格,掃描新的條形碼,打開第二張表格,關閉它並掃描新的條形碼。 – Aldoras
這真的很奇怪!我剛剛創建了一個簡單的WinForms應用程序,並用ShowDialog打開並關閉了一個窗體,沒有任何問題。你可以在SetText中包裝一切,看看是否有異常被拋出? – Matt