내 응용 프로그램에서 내 목록 상자에 추가하기 전에 열린 Wireshark 프로세스로 파일을 검사합니다. 이이 폴더 및 하위 폴더 안에 디렉토리를 클릭 루트 폴더를 취할 이벤트 및 확인이 모든 파일을 추가입니다 :내 BackgroundWorker가 끝날 때까지 기다려 새 BackgroundWorker를 엽니 다.
나는 많은 파일과 폴더를 선택하는 경우 그래서 개방Wireshark
과정입니다이 파일을 확인하고
private void btnAddDir_Click(object sender, EventArgs e)
{
try
{
if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
{
ThreadStart threadStart = delegate
{
foreach (string file in SafeFileEnumerator.EnumerateFiles(folderBrowserDialog1.SelectedPath, "*.*", SearchOption.AllDirectories))
{
Interlocked.Increment(ref numWorkers);
StartBackgroundFileChecker(file);
}
};
Thread thread = new Thread(threadStart);
thread.IsBackground = true;
thread.Start();
}
}
catch (Exception)
{ }
}
private void StartBackgroundFileChecker(string file)
{
ListboxFile listboxFile = new ListboxFile();
listboxFile.OnFileAddEvent += listboxFile_OnFileAddEvent;
BackgroundWorker backgroundWorker = new BackgroundWorker();
backgroundWorker.WorkerReportsProgress = true;
backgroundWorker.DoWork +=
(s3, e3) =>
{
//check my file
};
backgroundWorker.RunWorkerCompleted += backgroundWorker_RunWorkerCompleted;
backgroundWorker.RunWorkerAsync();
}
void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (Interlocked.Decrement(ref numWorkers) == 0)
{
//update my UI
}
}
, 많은 Wireshark
프로세스가 opned이 메모리에 많이 걸릴, 내 BackgroundWorker 완료 될 때까지 기다릴 수 및 다음 새 하나만 열 수 있습니까?
확신 I 이 코드에 이미 주석을 달았습니다. 똑같은 충고, 작업자 내부에서 foreach 루프를 움직여 하나의 BGW 만 필요합니다. 스레드를 기다리는 것은 항상 나쁜 생각입니다. 코드가 교착 상태가됩니다. –