2011-10-13 2 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()); 
    } 
} 

개인 무효 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 메서드를 호출 한 후 일정 시간 기다려야하는 것입니다

포트 바와 같이하지 않을 수 있습니다 즉시 닫히십시오.