私のアプリケーションはWiresharkファイルを受け取り、パケットを再生します。メインスレッドから私は、パケットを果たしている私のクラスをチェックすると、私のGUIを更新し、私は(Winフォームアプリケーション)タイマーを使用せずに、200ミリ秒ごとの代わりにすべての時間の私の更新イベントを起動したいのですタイマを使用せずに数ミリ秒ごとにイベントを発生させます
listBoxFiles.SetSelected(0, true);
bgWoSingle = new BackgroundWorker();
bgWoSingle.WorkerReportsProgress = true;
bgWoSingle.ProgressChanged += new ProgressChangedEventHandler(bgW_ProgressChanged);
bgWoSingle.DoWork += new DoWorkEventHandler(
(s3, e3) =>
{
while (loopsCount < numberOfLoops && bContinuePlay && ifContinue)
{
for (int i = 0; (i < listBoxFiles.Items.Count) && bContinuePlay && ifContinue; i++)
{
this.Invoke((MethodInvoker)delegate
{
lbCurrentFileNum.Text = "(" + (i + 1) + "/" + listBoxFiles.Items.Count + "):";
});
string path = (string)listBoxFiles.Items[i];
pcap = new Pcap(path, playSpeed, isSync);
pcap._startTimer += new EventHandler(pcap_packetStartTimer);
pcap._stopTimer += new EventHandler(pcap__packetStopTimer);
//this is the event i want to fire every 200 milliseconds
*********************************************************
pcap.evePacketProgress += new Pcap.dlgPacketProgress(
(progressCount) =>
{
pcap._fileSelectedIndex = i;
bgWoSingle.ReportProgress(progressCount, pcap);
});
*********************************************************
if (selectedAdapter != null)
{
bContinuePlay = pcap.playCapture(selectedAdapter._packetDevice);
}
}
loopsCount++;
}
});
bgWoSingle.RunWorkerCompleted += new RunWorkerCompletedEventHandler(
(s3, e3) =>
{
}
);
bgWoSingle.RunWorkerAsync();
あなたはタイマーを使用したくないのはなぜ?それが彼らのためのものです。 – Steven
あなたのループで 'Thread.Sleep'を使うかもしれませんか? –
私はThread.Sleepを避けることを好むbecuse私は停止ボタンの真ん中にproseccを殺すオプションが欲しい、それはタイマーでより簡単ですか? – user979033