【问题标题】:How to show directory in ongoing search process如何在正在进行的搜索过程中显示目录
【发布时间】:2013-10-03 12:13:03
【问题描述】:

我想向列出给定路径中文件的程序添加一个文本框。它将在面板上显示当前搜索目录。即使我像这样添加了textvox1.Text = dir,它也只会在搜索结束时显示最后一个目录。你能告诉我为什么它不起作用吗? Related question

public void GetFiles(string dir)
{
    textBox1.Text = dir;
    string[] filetypes = new string[] { "cfg", "txt" };
    foreach (string ft in filetypes)
    {                
        foreach (string file in Directory.GetFiles(dir, string.Format("*.{0}", ft), SearchOption.TopDirectoryOnly))
        {                   
            files.Add(new FileInfo(file));
        }                
    }
    foreach (string subDir in Directory.GetDirectories(dir))
    {                
        try
        {                    
            GetFiles(subDir);
        }                    
        catch
        {
        }            
    }
}

【问题讨论】:

  • 你很快就覆盖了文本框中的文本,你只看到最后一个,实际上(我假设但你的代码流很奇怪)它们都被设置为文本框文本
  • 尝试每次刷新文本框。
  • 是否应该将 textbox1.text 替换为 "if (textBox1.Text != dir.ToString()) textBox1.Text.Replace(textBox1.Text, dir.ToString()); else textBox1.文本 = dir.ToString();" ?

标签: c# textbox event-handling file-search


【解决方案1】:

“快速修复”是在设置文本框后调用DoEvents()

textBox1.Text = dir;
Application.DoEvents();
// ... rest of the code ...

然而,正确的解决方法是将该代码放入后台线程。如果您使用 BackgroundWorker() 控件,您可以使用 ReportProgress() 和相关的 ProgressChanged() 事件来更新 TextBox。

【讨论】:

  • 谢谢。它工作正常。但是,添加这个怎么样,它会减慢这个过程吗? "public void currentdir(FileInfo info) { textBox1.Text = info.FullName; } public void textBox1_TextChanged(object sender, EventArgs e) { try {currentdir(new FileInfo(dir)); } catch{} }"
  • 从技术上讲,它确实减慢了这个过程。如果您不希望它变慢,那么要么不向用户提供反馈,要么提供更少的反馈。他们真的需要查看每个文件夹吗?很有可能它们会飞得如此之快,以至于它们甚至都无法被理解......
猜你喜欢
  • 2011-06-24
  • 1970-01-01
  • 2011-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-17
相关资源
最近更新 更多