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
}
    }

添加选项以同时打开多个线程的最佳方法是什么?

4

1 回答 1

1

这是一个供您使用的简单示例,它展示了如何创建和签署一个事件,当打开文件的线程结束时您将弹出一个事件,然后您可以在事件弹出时打开另一个文件。确保你有一个计数器和一个锁,这样你就不会有竞争条件

   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();
         }
      }
   }

我花了一段时间,所以使用它

于 2013-07-29T05:44:01.693 回答