2011-10-13 17 views
6

Soy muy nuevo en el enhebrado. Espero que alguien me pueda dar un ejemplo.Enhebrado WPF C#

Estoy tratando de iniciar un hilo cuando el usuario haga clic en el botón de inicio y haga lo siguiente proceso:

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()); 
    } 
} 

GotRawData private void() es un método en el que hacer algo para que algunos datos en bruto de una hardware.

+0

Ver esta pregunta para obtener más información sobre la BackgroundWorker: http://stackoverflow.com/questions/5483565/how-to-use-wpf-background-worker –

Respuesta

7

Usted puede encontrar la clase System.ComponentModel.BackgroundWorker bastante útil que a mi entender es la forma más sencilla de ejecutar una operación en un hilo separado.

+0

tengo mirar en eso, pero no lo hago saber cómo usarlo realmente Me encuentro con muchos hilos, no sé cuál es mejor para mi caso. Ejemplo como threadPool y Dispatcher y este backgroundWorker. Me gustaría tener un ejemplo basado en mi proyecto. Más fácil de entender para mí. Gracias de todos modos por responder =) – user981924

+0

No hay problema - me alegro de que haya ayudado. Para comenzar, simplemente envuelva el código que necesite ejecutar en un hilo separado dentro de su evento ['DoWork'] (http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.dowork.aspx) entrenador de animales. Aún así, recomiendo que repase los ejemplos de código en MSDN, están bien documentados. –

0

No sé si entendí la pregunta correctamente. Una vez que el usuario hace clic en un botón, desea iniciar un hilo separado y recibir datos del puerto serie allí. creo que esto debería que:

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

usted no está haciendo ninguna llamada de bloqueo en btnStart_Click, así que está bien para simplemente ejecutar esto en el hilo principal interfaz de usuario.

Un par de puntos:

  • Recuerde que GotRawData se llamará en un subproceso de trabajo, así que si usted está accediendo a los controles de interfaz de usuario, que tendrá que reunir esas llamadas de nuevo en el hilo de interfaz de usuario.

  • De MSDN SerialPort.Open:

La mejor práctica para cualquier aplicación es esperar a que una cierta cantidad de tiempo después de llamar al método Close antes de intentar llamar al método Open, ya que el puerto no puede cerrarse al instante.