내 Winform 응용 프로그램을 사용하여 내 네트워크 카드에 패킷 버퍼를 보내고 내 응용 프로그램이 진행 막대를 통해 진행하도록 표시합니다. 회색이됩니다.) 그리고 모든 버퍼를 senging 한 후에 만 정상 동작으로 돌아갑니다. (내 버퍼가 50,000 패킷 이상인 경우) 그런 경우 어떻게 처리 할 수 있습니까? maybee는 모든 클래스 속성 (패킷 보내기 횟수 등)을 이벤트로 확인하는 백그라운드 워커를 변경 하시겠습니까? 여기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는) :
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
내 업데이트 참조하십시오. 내게 무슨 뜻인지 보여 줄 수 있습니까? – user979033
당신이해야 할 일은 typeCast뿐입니다. var pcapInstance = (Pcap) e.UserState; 이제 전체 데이터에 액세스 할 수 있습니다. 이게 니가 원하는거야? – Prakash