Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 控制线程数_C#_Winforms - Fatal编程技术网

C# 控制线程数

C# 控制线程数,c#,winforms,C#,Winforms,我有一个应用程序,我正在将文件添加到我的列表框,并运行这些文件。 我的应用程序使用PcapDot.Net项目DLL播放这些文件,并通过网络适配器发送数据包。 方法很简单:将所有文件添加到我的应用程序Listbox并单击播放按钮后,应用程序处理第一个文件,此文件完成后,下一个文件开始。 我想做的是在GUI中添加控制打开线程的数量的控件,以便能够同时播放多个文件 这是我的播放按钮事件: private BackgroundWorker bw; private void btnPlay_Cl

我有一个应用程序,我正在将文件添加到我的
列表框
,并运行这些文件。 我的应用程序使用
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
}
    }
privatebackgroundworker bw;
私有void btnPlay_单击(对象发送方,事件参数e)
{
bw=新的BackgroundWorker();
bw.WorkerReportsProgress=true;
bw.workersupport扫描单元=真;
bw.DoWork+=新DoWorkEventHandler(bw_DoWork);
bw.ProgressChanged+=新的ProgressChangedEventHandler(bw\U ProgressChanged);
bw.RunWorkerCompleted+=新的RunWorkerCompletedEventHandler(bw\u RunWorkerCompleted);
manualResetEvent=新的manualResetEvent(错误);
如果(bw.IsBusy!=真)
RunWorkerAsync();
}
私有void bw_DoWork(对象发送方,DoWorkEventArgs e)
{
for(int i=0;i
{
bw.ReportProgress(wiresharkFile.packetprogressincentage,wiresharkFile);
});
wiresharkFile.sendBuffer();//播放文件
}
}

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

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

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

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

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

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

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

你是在问如何打开线程吗?如果不是,请解释你的要求是什么,让这个代码先工作。这段代码很好用,我只问同时打开多个线程的最佳选项是什么,例如,如果我有一个10个文件的列表,我同时只想要4个文件,那么在第一个文件中的1个文件完成后,我现在同时有3个文件,因此自动启动另一个文件(可能是任务??)@user2214609?我可以举个例子,我应该如何将此代码放入我的代码中(我是一名新开发人员…)你是在问如何打开线程吗?如果不是,请解释你的要求是什么,让这个代码先工作。这段代码很好用,我只问同时打开多个线程的最佳选项是什么,例如,如果我有一个10个文件的列表,我同时只想要4个文件,那么在第一个文件中的1个文件完成后,我现在同时有3个文件,因此自动启动另一个文件(可能是任务??)@user2214609?我可以举个例子,我应该如何将此代码放入我的代码中(我是一名新开发人员…)