私が持っているの上部にForm1
:
int searchTime;
public TimeSpan ts_timeElapsed;
DirectoryInfo dirinf = new DirectoryInfo(@"C:\");
List<FileSystemInfo> fsi = new List<FileSystemInfo>();
List<string> texts = new List<string>();
public Form1()
{
InitializeComponent();
label6.Visible = false;
searchTime = 0;
label4.Visible = false;
}
次に、次を開始するボタンをクリックしますbackgroundWorker
。
private void button1_Click(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
button1.Enabled = false;
timer1.Enabled = true;
}
その後、backgroundWorker1_DoWork
イベント:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
Search(".xml", dirinf, fsi);
backgroundWorker1.ReportProgress(100);
}
次に、Search
関数コード:
public void Search(string strExtension,
DirectoryInfo di,
List<FileSystemInfo> pResult)
{
try
{
foreach (FileInfo fi in di.GetFiles())
{
if (InvokeRequired)
{
BeginInvoke(new Action(() => label2.Text = fi.Name));
}
if (fi.Name == "MessageLog.xsl")
{
foreach (FileInfo fii in di.GetFiles())
{
if (fii.Extension == strExtension)
pResult.Add(fii);
}
if (InvokeRequired)
{
BeginInvoke(new Action(() => label4.Text = pResult.Count.ToString() + Environment.NewLine));
}
}
}
foreach (DirectoryInfo diChild in di.GetDirectories())
Search(strExtension, diChild, pResult);
}
catch (Exception e)
{
}
}
検索は から始まりc:\
ます。プログラムは、約 5 つのファイルを検索した後、数秒間停止し、さらにファイルを検索し続け、最後にフリーズします。バックグラウンドワーカーで動作していても、何もクリックできません。
それから数回後、一時停止やフリーズすることなく、高速かつスムーズに検索します。
最初の数回の検索が一時停止してフリーズするのに、その後の検索がスムーズに進むのはなぜですか?