WPF Threading C # - PullRequest
       1

WPF Threading C #

6 голосов
/ 13 октября 2011

Я очень новичок в потоках.Я надеюсь, что кто-то может привести мне пример.

Я пытаюсь запустить поток, когда пользователь нажимает кнопку «Пуск» и выполняет следующий процесс:

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метод, в котором я делаю что-то, чтобы получить некоторые необработанные данные от оборудования.

Ответы [ 3 ]

7 голосов
/ 13 октября 2011

Вы можете найти класс System.ComponentModel.BackgroundWorker весьма полезным, который, на мой взгляд, является самым простым способом выполнения операции в отдельном потоке.

0 голосов
/ 13 октября 2011

Вы не делаете никаких блокирующих вызовов в btnStart_Click, поэтому можно просто выполнить это в главном потоке пользовательского интерфейса.

Пара моментов:

  • Помните, что GotRawData будет вызываться в рабочем потоке, поэтому, если вы обращаетесь к каким-либо элементам управления пользовательского интерфейса, вам придется перенаправить эти вызовы обратно в поток пользовательского интерфейса.

  • СMSDN SerialPort.Open :

Для любого приложения рекомендуется подождать некоторое время после вызова метода Close, прежде чем пытаться вызватьОткрытый метод, поскольку порт может быть закрыт не сразу.

0 голосов
/ 13 октября 2011

Не знаю, правильно ли я понял вопрос.Как только пользователь нажимает кнопку, вы хотите запустить отдельный поток и получать данные от последовательного порта.Я думаю, что это должно что:

private void btnStart_Click(object sender, RoutedEventArgs e)
{
Thread GetData = new Thread(thFunctionToRun);
GetData.Start();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...