[英]WPF threading C#
我对线程很新。 我希望有人可以给我一些例子。
我正在尝试在用户单击开始按钮时启动一个线程并执行以下过程:
private void btnStart_Click(object sender, RoutedEventArgs e)
{
if (serialPort.IsOpen)
serialPort.Close();
try
{
//To set all the parameters for Serial Comm
serialPort.PortName = "COM14";
serialPort.BaudRate = int.Parse("38400");
serialPort.Parity = Parity.None;
serialPort.DataBits = 8;
serialPort.StopBits = StopBits.One;
serialPort.Encoding = System.Text.Encoding.ASCII;
serialPort.DataReceived += new SerialDataReceivedEventHandler(GotRawData);
serialPort.Open();
//To show that Com Port is Opened
txtboxOutput.AppendText(DateTime.Now.ToString("hh:mm:ss tt") + " - COM14 is opened." + Environment.NewLine);
txtboxOutput.ScrollToEnd();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
private void GotRawData()是一种方法,我可以从硬件中获取一些原始数据。
您可能会发现System.ComponentModel.BackgroundWorker类非常有用,在我的理解中,这是在单独的线程上执行操作的最简单方法。
我不知道我是否正确理解了这个问题。 一旦用户单击一个按钮,您就想要启动一个单独的线程并从那里的串行端口接收数据。 我认为这应该是这样的:
private void btnStart_Click(object sender, RoutedEventArgs e)
{
Thread GetData = new Thread(thFunctionToRun);
GetData.Start();
}
你没有在btnStart_Click
进行任何阻塞调用,所以在主UI线程上运行它是没关系的。
几点:
请记住,将在工作线程上调用GotRawData
,因此,如果要访问任何UI控件,则必须将这些调用GotRawData
送回UI线程。
来自MSDN SerialPort.Open :
任何应用程序的最佳实践是在尝试调用Open方法之前等待一段时间后再调用Close方法,因为端口可能不会立即关闭。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.