2011-10-13 6 views
6

私は非常にスレッドに慣れています。誰かが私に例を挙げてくれることを願っています。WPFスレッド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は()私からいくつかの生データを取得するために何かをする方法であり、ハードウェア

+0

はBackgroundWorkerの上のより多くの情報を取得するには、この質問を参照してください:http://stackoverflow.com/questions/5483565/how-to-use-wpf-background-worker –

答えて

7

System.ComponentModel.BackgroundWorkerというクラスは、私の理解では別のスレッドで操作を実行する最も簡単な方法であると考えられます。

+0

は、私はそれに見てきましたが、私にはありませんそれを実際に使用する方法を知っている。私は多くのスレッドに出くわして、どちらが私の場合に適しているかわからない。例えば、threadPool、Dispatcher、そしてこのbackgroundWorkerのようなものです。私は私のプロジェクトに基づいていくつかの例を持っていたいと思います。わかりやすい。とにかく答える=ありがとう=) – user981924

+0

問題はありません - それは助けてうれしいです。開始するには、[DoWork'](http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.dowork.aspx)イベント内の別のスレッドで実行する必要があるコードをすべてラップするだけですハンドラ。それでもMSDNのコードサンプルを参照することをお勧めします。 –

0

質問が正しく理解されているかどうかわかりません。 ユーザーがボタンをクリックすると、別のスレッドを開始し、そこでシリアルポートからデータを受信したいとします。 私は、これはその必要があると思う:

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

あなたはbtnStart_Click内の任意のブロッキング呼び出しを行っていないので、それだけで、メインUIスレッド上でこれを実行するために罰金です。

ポイントのカップル:

  • GotRawDataは、ワーカースレッド上で呼び出されますので、あなたは、任意のUIコントロールにアクセスしている場合、あなたが戻ってUIスレッドの上にこれらの呼び出しをマーシャリングする必要があることを覚えておいてください。 MSDN SerialPort.Openから

任意のアプリケーションのためのベストプラクティスは、ポートがないかもしれないとして、Openメソッドを呼び出そうとする前にCloseメソッドを呼び出した後の時間のいくつかの量を待つことです即座に閉鎖する。

関連する問題