我正在构建C#Windows窗体应用程序来搜索特定目录。搜索到的路径的输出被发送到控制台。如何将该方法导入Windows窗体?
// Display the pathof each examined file.
foreach (var DisplayPath in fileList)
{
Console.WriteLine(DisplayPath);
}
答案 0 :(得分:0)
最简单的方法是将TextBox控件添加到表单并将其设置为多行。然后每行输出就像这样附加到控件......
textBox1.Text += DisplayPath;
...如果你更喜欢在顶部插入每一行,那么更容易看到输出,而不必经常滚动到TextBox的底部,然后这样做......
textBox1.Text = DisplayPath + textBox1.Textl
答案 1 :(得分:0)
谢谢菲尔。我现在看到的问题,我将整个路径列表存储到变量中。输出是一个路径块。我喜欢让每个路径“textBox1”动态变化,每次读取路径时,“textBox1”都会显示它。这就是我所拥有的:
// Get IEnumerable (as in a list) on all files by recursively scanning directory.
var fileList = Directory.EnumerateFiles(AppDirectory, "*", SearchOption.AllDirectories);
// Retrieve the size of files.
long fileSize = (from file in fileList let fileInfo = new FileInfo(file) select fileInfo.Length).Sum();
// Display the path and file of each examined file.
foreach (var DisplayPath in fileList)
{
textBox2.Text += DisplayPath;
}
答案 2 :(得分:0)
我不确定我是否正确理解您的要求。您可以试试这个并告诉我们您正在搜索的是什么类似的东西:
(只是快速和肮脏的黑客一起作为起点):
using System.Threading.Tasks;
....
Task.Factory.StartNew(() =>
{
// Get IEnumerable (as in a list) on all files by recursively scanning directory.
var fileList = Directory.EnumerateFiles(AppDirectory, "*", SearchOption.AllDirectories);
long totalSize = 0;
// Retrieve the size of files.
foreach (string path in fileList)
{
FileInfo fileInfo = new FileInfo(path);
long size = fileInfo.Length;
totalSize += size;
Invoke((Action)(() =>
{
listBox1.Items.Add(path + ": " + size.ToString());
textBox1.Text = totalSize.ToString();
}));
}
});
这使用ListBox显示路径和大小,使用TextBox显示总大小。
Invoke调用很重要,因为它允许从线程访问GUI(而Task是另一个线程)。如果省略Invoke调用,则会出现跨线程异常。
在Stackoverflow上,您可以找到有关此问题的许多信息(从后台线程访问GUI以及处理此问题的许多不同(更好)方法。