【问题标题】:WPF threading C#WPF 线程 C#
【发布时间】:2011-10-13 02:36:48
【问题描述】:

我对线程很陌生。我希望有人能给我一些例子。

当用户单击开始按钮并执行以下过程时,我正在尝试启动线程:

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() 是一种我从硬件获取原始数据的方法。

【问题讨论】:

标签: c# wpf multithreading visual-studio-2010 c#-4.0


【解决方案1】:

您可能会发现 System.ComponentModel.BackgroundWorker 类非常有用,据我了解,这是在单独线程上执行操作的最简单方法。

【讨论】:

  • 我已经研究过了,但我不知道如何实际使用它。我遇到了很多线程,不知道哪一个更适合我的情况。例如 threadPool 和 Dispatcher 以及这个 backgroundWorker。我想有一些基于我的项目的例子。我更容易理解。无论如何感谢您的回答=)
  • 没问题——很高兴它有帮助。要开始,只需将您需要在其DoWork 事件处理程序中的单独线程中运行的任何代码包装起来。我仍然建议您浏览 MSDN 上的代码示例,它们都有很好的文档记录。
【解决方案2】:

我不知道我是否正确理解了这个问题。 一旦用户单击一个按钮,您就想启动一个单独的线程并从那里的串行端口接收数据。 我认为应该这样:

private void btnStart_Click(object sender, RoutedEventArgs e)
{
Thread GetData = new Thread(thFunctionToRun);
GetData.Start();
}

【讨论】:

    【解决方案3】:

    您没有在 btnStart_Click 中进行任何阻塞调用,因此只需在主 UI 线程上运行它就可以了。

    几点:

    • 请记住,GotRawData 将在工作线程上调用,因此如果您正在访问任何 UI 控件,则必须将这些调用编组回 UI 线程。

    • 来自 MSDN SerialPort.Open

    任何应用程序的最佳做法是在调用 Close 方法后等待一段时间,然后再尝试调用 Open 方法,因为端口可能不会立即关闭。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多