控制线程数
本文关键字:线程 控制线 控制 | 更新日期: 2023-09-27 18:25:19
我有一个应用程序,我要将文件添加到我的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
}
}
添加选项以在同一时间打开多个线程的最佳方式是什么?
这里有一个简单的例子供您使用,它展示了如何创建并签名到打开文件的线程结束时将弹出的事件,然后当事件弹出时,您可以打开另一个文件。确保你有一个计数器和一个锁,这样你就不会有比赛条件
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();
}
}
}
它花了我一段时间,所以使用它