繁体   English   中英

WPF线程C#

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM