我有一個Arduino板,它可以通過Xbee模塊將一些傳感器讀數無線傳輸到串行USB模塊。 我寫了下面的代碼來讀取數據:WPF應用程序在從Arduino設備讀取串行數據時崩潰
public partial class Debugger : Page
{
public static string comportnum;
public delegate void NoArgDelegate();
public static SerialPort serialX;
public Debugger()
{
InitializeComponent();
comportnum = "";
}
private void ActualButton_Click(object sender, RoutedEventArgs e)
{
comportnum = "COM" + comport.Text;
serialX = new SerialPort(comportnum);
serialX.BaudRate = 9600;
try
{
serialX.Open();
serialX.DataReceived += new SerialDataReceivedEventHandler(serialX_DataReceived);
}
catch (Exception)
{
MessageBox.Show("Houston, we have a problem.");
//throw;
}
}
void serialX_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
MessageBox.Show("Ping");
readingStuff();
}
void readingStuff()
{
String comdata;
base.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send, (NoArgDelegate)delegate
{
DebugWindow.Text += "Data";
comdata = serialX.ReadLine();
DebugWindow.Text += "\n" + comdata + "\n";
});
}
}
這隻要我有工作MessageBox.Show(「中國平安」)。沒有它,該應用程序凍結/崩潰。當它凍結/崩潰時,沒有運行時錯誤。即使在調試時,Visual Studio也會繼續運行,但是我無法點擊WPF應用程序的任何其他按鈕,甚至無法單擊WPF應用程序上的關閉按鈕。
我需要找出一種方法來確保數據在沒有任何中斷的情況下順利讀取,而無需使用MessageBox。
您可能有一個線程問題。嘗試將串行讀取放入單獨的線程中,並在必要時應用線程間通信來更新GUI。 – Marcel