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 개 이상의 스레드를 열고 옵션을 추가하는 가장 좋은 방법은 무엇입니까?
당신이 스레드를 여는 방법을 묻는 당신이 나에게 렸어요 경쟁 조건
을하지 않도록 당신이 카운터와 잠금을 유지해야합니다, 그래서 사용할 수 있습니까? 당신이 무엇을 요구하는지 설명 해주십시오. –
이 코드를 먼저 작성하십시오. 그러면 당신이 요구하는 것을 얻는 방법도 분명해질 것입니다. –
이 코드는 잘 작동하며, 몇 가지 스레드를 동시에 열 수있는 최선의 옵션이 무엇인지 물어 봅니다. 예를 들어 10 개의 파일 목록이 있고 동시에 4 개의 파일 만 원한다면 첫 번째 파일이 끝나면 끝납니다. 이제 3 개의 파일이 동시에 자동으로 다른 파일이 시작됩니다 (Task? 일 수도 있습니다) – user2214609