2011-10-13 25 views
6

Ben iş parçacığı için çok yeni. Umarım birileri bana örnek verebilir.WPF iş parçacığı 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()); 
    } 
} 

özel geçersiz GotRawData() i bir şey bazı ham veri almak için ne bir yöntemdir: Ben başlangıç ​​düğmesine kullanıcı tıklayın ve takip eden işlemlerin bir iş parçacığı başlatmak için çalışıyorum

donanım.

+0

BackgroundWorker hakkında daha fazla bilgi almak için bu soruya bakın: http://stackoverflow.com/questions/5483565/how-to-use-wpf-background-worker –

cevap

7

System.ComponentModel.BackgroundWorker sınıfını oldukça kullanışlı bulabilirsiniz, bu da benim anlayışımda ayrı bir iş parçacığı üzerinde bir işlemi yürütmenin en basit yoludur.

+0

Bunun içine bakmak ettik ama yok Bunu nasıl kullanacağımı biliyorum. Çok fazla iş parçacığıyla karşılaşıyorum, benim durumum için hangisinin daha iyi olduğunu bilmiyorum. ThreadPool ve Dispatcher ve bu backgroundWorker gibi örnek. Projeme dayanarak bir örnek vermek istiyorum. Anladığım için daha kolay. Yine de teşekkürler =) – user981924

+0

Sorun değil - yardımcı oldu. Başlamak için, sadece "DoWork'" (http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.dowork.aspx) etkinliğinde ayrı bir iş parçacığında çalıştırmanız gereken herhangi bir kodu yazınız. işleyicisi. Yine de MSDN'deki kod örneklerini incelemenizi öneririm, iyi belgelenmişlerdir. –

0

Soruyu doğru anladıysam bilmiyorum. Kullanıcı bir düğmeye bastığında, ayrı bir iş parçacığı başlatmak ve orada seri bağlantı noktasından veri almak istiyorsunuz.

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

Sen btnStart_Click herhangi engelleme arama yapmak değiliz, bu nedenle sadece ana UI iş parçacığı üzerinde bu çalışmasına gayet: Bu o gerektiğini düşünüyorum.

Birkaç nokta:

  • GotRawData bir iş parçacığı üzerinde çağrılacak unutmayın, bu yüzden herhangi bir UI denetimleri erişmeye çalışması halinde geri UI iş parçacığı üzerine bu aramaları sıralamakta gerekecektir. MSDN SerialPort.Open itibaren

  • :

    herhangi bir uygulama için en iyi uygulama Open yöntemi çağrısı denemeden önce kapatın yöntemi çağrıldıktan sonra zaman bir miktar beklemektir

, bağlantı noktası olarak olmayabilir anında kapatılmalıdır.

İlgili konular