私のWinformアプリケーションを使用してネットワークカードにパケットのバッファを送信しています。私のアプリケーションはスタックされていません。灰色になります)、すべてのバッファを読み込んだ後にのみ正常な動作に戻ります(バッファが非常に大きい場合は50,000パケット以上) どうすればこのようなケースに対処できますか?私のクラスのプロパティ(パケットの数など)をイベントでチェックするバックグラウンド作業者を変更するかどうかbackgroundworker vsイベント
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);
pcap.evePacketProgress += new Pcap.dlgPacketProgress(
(progressCount) =>
{
pcap._fileSelectedIndex = i;
bgWoSingle.ReportProgress(progressCount, pcap);
});
if (selectedAdapter != null)
{
//play the file
bContinuePlay = pcap.playCapture(selectedAdapter._packetDevice); }
}
loopsCount++;
}
bgWoSingle.RunWorkerCompleted += new RunWorkerCompletedEventHandler(
(s3, e3) =>
{
}
);
bgWoSingle.RunWorkerAsync();
ここで私は(クラス名がPCAPである)クラスのプロパティを確認:アイデアがBGWorkerを使用していますPacketSenderクラスを持つことであり、それへの登録は、進行中のイベント、などだ
void bgW_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
//check the properties and update the UI
labelPacketSent.Text = pcap._numberOfSendPackets.ToString("#,##0");
progressBar1.Value = e.ProgressPercentage;
}
現在、私のBackgroundWorkerはメインスレッドのもので、パケットを送信するcalssを確認しています – user979033
私のupdaeを見て、あなたが何を意味するのか教えてください。 – user979033
あなたがしなければならないのは、タイプキャストです。 var pcapInstance =(Pcap)e.UserState;これで、すべてのデータにアクセスできます。これは、あなたの望むことですか? – Prakash