私のアプリケーションでは、この方法でファイルをWireshark process
追加する前に、開いてファイルをチェックしています:Listbox
protected string[] invokeProcess(WiresharkProcesses process, string args)
{
string processToInvoke = null;
validateProcess(process);
switch (process)
{
case WiresharkProcesses.Capinfo:
processToInvoke = Path.Combine(getbBasePath, "capinfos.exe");
break;
case WiresharkProcesses.Editcap:
processToInvoke = Path.Combine(getbBasePath, "editcap.exe");
break;
case WiresharkProcesses.Tshark:
processToInvoke = Path.Combine(getbBasePath, "tshark.exe");
break;
case WiresharkProcesses.Wireshark:
processToInvoke = Path.Combine(getbBasePath, "wireshark.exe");
break;
}
ProcessStartInfo capinfosProcess = new ProcessStartInfo(processToInvoke);
capinfosProcess.Arguments = args;
capinfosProcess.WindowStyle = ProcessWindowStyle.Hidden;
capinfosProcess.RedirectStandardOutput = true;
capinfosProcess.RedirectStandardError = true;
capinfosProcess.CreateNoWindow = true;
capinfosProcess.UseShellExecute = false;
capinfosProcess.ErrorDialog = false;
List<string> lineList = new List<string>();
using (Process pros = Process.Start(capinfosProcess))
{
StreamReader reader = pros.StandardOutput;
while (!reader.EndOfStream)
{
lineList.Add(reader.ReadLine());
}
pros.WaitForExit();
}
return lineList.ToArray();
}
private static string getbBasePath
{
get
{
if (Directory.Exists(@"C:\Program Files (x86)\Wireshark"))
{
return @"C:\Program Files (x86)\Wireshark";
}
else
{
return @"C:\Program Files\Wireshark";
}
}
}
private void validateProcess(WiresharkProcesses process)
{
switch (process)
{
case WiresharkProcesses.Capinfo:
break;
case WiresharkProcesses.Editcap:
break;
case WiresharkProcesses.Tshark:
break;
case WiresharkProcesses.Wireshark:
break;
}
}
}
このファイルをチェックするときThread
、Uiがフリーズするのを防ぐためにこれを実行しているため、ルートフォルダーを選択すると、同時に多くのプロセスが開かれ、途中でアプリケーションを閉じると、それらのプロセスはすべて開いたままになり、このことはメモリに多くかかります。どうすればそれを防ぐことができますか? おそらく、このプロセスを別のスレッドで開き、このスレッドを次のように構成しますisBackground = true ?