我工作的一個C#WinForms應用程序,我希望它能夠流行開一個無模式對話框這將讓重繪,並在同一時間,是互動主窗口/窗體。C#的WinForms子窗體顯示()後沒有得到重繪
主窗口使用的SerialPort和顯示數據傳送計數,它們經由SerialDataReceivedEventHandler不斷增加。
我可以使用ShowDialog(),它似乎以模態方式工作,但主窗口數據計數器凍結,而對話框正在使用,我認爲最終串行緩衝區溢出。我想我想使用Show(),但是如果我這樣做,對話框會出現在屏幕上半繪製,然後不再繪製或交互(如果我拖動另一個窗口跨過它)將不會被繪製或交互。它保持在屏幕上,直到我關閉主應用程序窗口。
也許我應該開始另一個線程,或者有可能的,我只是做了什麼。我通常不會做C#或Windows程序設計(也許你可以告訴。)評論(感謝,評論)後
編輯:
我想,也許大多數事情越來越下任何線程串行接收事件處理器運行被調用。當啓動我的應用程序創建一個類來處理串行端口,其中包括:
com.DataReceived += new SerialDataReceivedEventHandler(SerialRxHandler);
我寫了關心線程的唯一的代碼是一些功能更新計數器和日誌列表框,我發現了與一些InvokeRequired包裹阻止我獲取有關線程切換的抱怨:
delegate void SetCountDelegate(TextBox tb, int count);
internal void SetCount(TextBox tb, int count) {
// thread switch magic
if (InvokeRequired) {
BeginInvoke(new SetCountDelegate(SetCount), new object[] { tb, count });
} else {
tb.Text = String.Format("{0}", count);
}
}
所以也許我不應該試圖表明()在此線程的形式。另一個InvokeRequired塊,還是我應該做的事情完全不同?
可以請您發佈您的代碼。你是從UI線程上的串行端口讀取? – 2011-01-11 07:41:04