私は、Wireshark ファイルを再生し、pcapdot.net を使用してパケットをネットワーク カードに送信するビルド アプリケーションです。
私のアプリケーションでは、ディレクトリ ルートを取得し、過去 24 時間の新しいファイルのみを追加します。最初に、すべてのファイルをディレクトリから my に追加しList<string>
、次にmy に追加しますListView
。アプリケーションがすべてのファイルの再生を終了した後、リストをクリアし、ListView をクリアして、過去 24 時間のファイルを再度検索し、ListView
. 私の問題は、ファイルをリストに再度追加し、ファイルを追加しようとするとListView
、アプリケーションがクラッシュし、アイテム「file.pcap」を複数の場所に追加または挿入できないというエラーが発生するということです。まず、現在の場所から削除するか、複製する必要があります。
ファイルの再生が終了したら、List、ListView を消去し、再度ファイルを追加して再生します。
lvFiles.Items.Clear();
filesList.RemoveRange(0, filesList.Count - 1);
addFiles();
playFiles();
追加ファイル(); - すべてのファイルを List から ListView にアフします:
private void addFiles()
{
BackgroundWorker backgroundWorker = new BackgroundWorker();
backgroundWorker.WorkerReportsProgress = true;
backgroundWorker.DoWork += new DoWorkEventHandler(
(s3, e3) =>
{
filesList = SafeFileEnumerator.EnumerateFiles(pathToSearch, "*.pcap",
SearchOption.AllDirectories).ToList();
});
backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(
(s3, e3) =>
{
if (filesList.Count != 0)
AddFilesToListView(filesList);
});
backgroundWorker.RunWorkerAsync();
}
playFiles() - ListView ですべてのファイルを再生します。
private void playFiles()
{
lockButtons();
string filePath = string.Empty;
BackgroundWorker backgroundWorker = new BackgroundWorker();
backgroundWorker.WorkerReportsProgress = true;
backgroundWorker.DoWork += new DoWorkEventHandler(
(s3, e3) =>
{
for (int i = 0; i < lvFiles.Items.Count && shouldContinue; i++)
{
this.Invoke((MethodInvoker)delegate
{
lvFiles.EnsureVisible(i);
lvFiles.Items[i].Selected = true;
lvFiles.Select();
filePath = lvFiles.Items[i].Tag.ToString();
toolStripStatusLabel.Text = string.Format("Current file: {0}", lvFiles.Items[i].Text);
});
PcapFile pcapFile = new PcapFile();
pcapFile.sendQueue(filePath, adapter);
this.Invoke((MethodInvoker)delegate { lvFiles.Items[i].Selected = false; });
}
});
私のListViewにファイルを追加します:
private void addFileToListBox(string filePath, string duration)
{
item = new ListViewItem(new string[] { new FileInfo(filePath).Name, duration, "Waiting" });
item.Tag = new FileInfo(filePath).FullName;
this.Invoke((MethodInvoker)delegate { lvFiles.Items.Add(item); });
}
おそらく「誰か」がまだファイルを保持していますか?