winforms 如何从backgroundworker dowork事件中的循环向progresschanged事件报告进度文件名?

n1bvdmb6  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(121)

我试图报告每个找到的文件在循环中的进度时,文件是得到添加到FilesFound列表报告的文件名到progresschanged和progresschanged显示标签上的文件名。
循环方法

private void SearcherCore(string sDir)
        {
            try
            {
                foreach (var directory in Directory.GetDirectories(sDir))
                {
                    foreach (var filename in Directory.GetFiles(directory))
                    {
                        using (var streamReader = new StreamReader(filename))
                        {
                            var contents = streamReader.ReadToEnd().ToLower();

                            if (contents.Contains(SearchText))
                            {
                                FilesFound.Add(filename);
                            }
                        }
                    }

                    SearcherCore(directory);
                }
            }
            catch (System.Exception ex)
            {
                
            }
        }

多沃克事件

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            if (textBoxSearchDirectory.Text != "")
            {
                SearcherCore(textBoxSearchDirectory.Text);
            }
        }

progresschanged事件仍然没有代码。

zdwk9cvp

zdwk9cvp1#

BackGroundWorker.ReportProgress方法将会很有用。您可以使用以intobject为参数的多载。
因此,当您找到一个文件时,可以执行以下操作:
backgroundWorker1.ReportProgress(0, filename);
(so这将放在FilesFound.Add(filename);行下面。
0就是percentProgress,在本例中您似乎并不关心它.
然后您将实现backgroundWorker1_ProgressChanged事件。要获取文件名,可以使用ProgressChangedEventArgsUserState属性。

相关问题