【发布时间】:2013-03-24 06:48:55
【问题描述】:
我正在使用 Pcapdot.net DLL 将数据包缓冲区发送到我的网络适配器。我检查了我的 Wireshark 文件并收集了所有信息,例如数据包数量、持续时间等。 我的主类发送缓冲区并具有几个属性(数据包数、持续时间..)在主线程中,我正在使用 BackgroundWorker.ProgressChanged 检查这个类:
bgWoSingle = new BackgroundWorker();
bgWoSingle.WorkerReportsProgress = true;
bgWoSingle.ProgressChanged += new ProgressChangedEventHandler(bgW_ProgressChanged);
Wireshark 文件中的每个数据包都有一个时间戳,当然我可以通过增加或减少数据包之间的时间戳以其他速度发送这个缓冲区。 现在我的问题是:
我正在检查的属性之一是我已经发送了多少数据包。因为我知道我的文件包含多少数据包,所以我可以通过进度条显示进度。如果我通过删除数据包播放之间的所有延迟来将发送速率更改为最大值,那么速度是如此之快,进度条和所有 UI 都会卡住,直到它完成发送所有数据包。我怎样才能改变它?也许通过另一个线程更新我的 ProgressBar?
这是检查我的班级的职能:
void bgW_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
//bla bla bla (check all Class properties)
pcap = e.UserState as Pcap;
progressBar1.Value = e.ProgressPercentage; //here is my progressBar update
//bla bla bla (check all Class properties)
}
【问题讨论】:
-
“卡住”是指无响应(即窗口在点击时变为灰色,因此您必须从另一个线程执行 I/O)还是只是进度条没有更新?
-
是的,在点击完成之前它会变成灰色并显示“未响应”消息,我如何通过另一个线程更新我的所有 bgW_ProgressChanged ?