0

私が持っているの上部に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 つのファイルを検索した後、数秒間停止し、さらにファイルを検索し続け、最後にフリーズします。バックグラウンドワーカーで動作していても、何もクリックできません。

それから数回後、一時停止やフリーズすることなく、高速かつスムーズに検索します。

最初の数回の検索が一時停止してフリーズするのに、その後の検索がスムーズに進むのはなぜですか?

4

0 に答える 0