2013-07-28 3 views
1

나는 내 Listbox에 파일을 추가하고 해당 파일을 실행하는 응용 프로그램이 있습니다. 내 응용 프로그램은 PcapDot.Net 프로젝트 DLL을 사용하여이 파일을 재생하고 네트워크 어댑터를 통해 패킷을 보냅니다. 방법은 매우 간단합니다. 모든 파일을 내 애플리케이션 Listbox에 추가하고 재생 버튼을 클릭하면 애플리케이션이 첫 번째 파일을 처리 한 후이 파일이 완료된 후 다음 파일이 시작됩니다. 내가 원하는 것은 여러 파일을 동시에 재생할 수 있도록 열려있는 스레드의 수를 제어하는 ​​GUI에 컨트롤을 추가하는 것입니다.스레드 수 제어

이 내 재생 버튼 이벤트입니다 :

private BackgroundWorker bw; 

    private void btnPlay_Click(object sender, EventArgs e) 
    { 
     bw = new BackgroundWorker(); 
     bw.WorkerReportsProgress = true; 
     bw.WorkerSupportsCancellation = true; 
     bw.DoWork += new DoWorkEventHandler(bw_DoWork); 
     bw.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged); 
     bw.RunWorkerCompleted += new    RunWorkerCompletedEventHandler(bw_RunWorkerCompleted); 
     manualResetEvent = new ManualResetEvent(false); 
     if (bw.IsBusy != true) 
      bw.RunWorkerAsync(); 
    } 

    private void bw_DoWork(object sender, DoWorkEventArgs e) 
    { 
     for (int i = 0; i < listBoxFiles.Items.Counti++) //run in loop all over my listbox 
{ 
      // here if have several wiresharkFile events that update my UI: 
     wiresharkFile.statusChangedEvent += new WiresharkFile.StatusChangedDelegate(
      (wFile) => 
      { 
       bw.ReportProgress(wiresharkFile.packetProgressPrecentage, wiresharkFile); 
      }); 

     wiresharkFile.sendBuffer(); //play the file 
} 
    } 

가 같은 시간에 1 개 이상의 스레드를 열고 옵션을 추가하는 가장 좋은 방법은 무엇입니까?

+0

당신이 스레드를 여는 방법을 묻는 당신이 나에게 렸어요 경쟁 조건

public delegate void FileClosedHndlr(); public class MyThread { private event FileClosedHndlr FileClosed; public void MyMain() { Thread t = new Thread(new ThreadStart(start)); FileClosed += new FileClosedHndlr(MyThread_FileClosed); t.Start(); } void MyThread_FileClosed() { // Thread has ended file open // open another file } private void start() { // Open the file // End thread if (FileClosed != null) { FileClosed(); } } } 

을하지 않도록 당신이 카운터와 잠금을 유지해야합니다, 그래서 사용할 수 있습니까? 당신이 무엇을 요구하는지 설명 해주십시오. –

+0

이 코드를 먼저 작성하십시오. 그러면 당신이 요구하는 것을 얻는 방법도 분명해질 것입니다. –

+0

이 코드는 잘 작동하며, 몇 가지 스레드를 동시에 열 수있는 최선의 옵션이 무엇인지 물어 봅니다. 예를 들어 10 개의 파일 목록이 있고 동시에 4 개의 파일 만 원한다면 첫 번째 파일이 끝나면 끝납니다. 이제 3 개의 파일이 동시에 자동으로 다른 파일이 시작됩니다 (Task? 일 수도 있습니다) – user2214609

답변

1

여기에 사용하기 쉬운 예제가 있습니다.이 파일은 파일을 여는 스레드가 끝날 때 팝업하고 다른 파일을 열 때 팝업 할 수있는 이벤트를 만들고 서명하는 방법을 보여줍니다. 그것은

관련 문제