Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更新文件夹内容_C#_Winforms - Fatal编程技术网

C# 更新文件夹内容

C# 更新文件夹内容,c#,winforms,C#,Winforms,我创建了一个应用程序,它可以获取文件夹的内容并在listview中列出它们,我想知道每“X”秒更新一次的最佳方法是什么 以前,我在GUI中有一个“刷新”按钮,但是我想离开它,自动刷新 我已经使用过,但是我知道Sleep()将导致应用程序完全停止,直到计时器启动: public Form1() { InitializeComponent(); RefreshQueue(); label1.Text = listBox1.Items.Count.ToString();

我创建了一个应用程序,它可以获取文件夹的内容并在listview中列出它们,我想知道每“X”秒更新一次的最佳方法是什么

以前,我在GUI中有一个“刷新”按钮,但是我想离开它,自动刷新

我已经使用过,但是我知道
Sleep()
将导致应用程序完全停止,直到计时器启动:

public Form1()
{
    InitializeComponent();
    RefreshQueue();
    label1.Text = listBox1.Items.Count.ToString();
    while (i > 1)
    {
        RefreshQueue();
        System.Threading.Thread.Sleep(1000);
    }
}
而且:

public void Update()
{
    RefreshQueue();
}
RefreshQueue()
清除当前列表框并调用
PrintQueue()


你能提供你已经尝试过的代码吗?也许可以使用定时器?还是文件系统监视者?为了获得更好的答案,您应该描述您已经实现了什么以及您在哪里遇到了困难。此外,所使用的技术(WinForms、WPF、ASP.NET等)也很重要。我尝试使用Update()方法,以及一个While(I=1)循环。我一直在尝试使用System.Threading.Thread.Sleep(1000)等待1秒。这是在使用表单时发生的。您看过吗?WinForms和在代码背后执行任何等待/异步代码的问题在于,它与UI在同一线程中执行。这意味着,如果要定期更新UI,必须使用一种方法在后台更新数据,然后向UI发送信号,要求它根据新检索的数据进行自我更新。在这种情况下,您需要一个在后台执行的计时器,它只告诉UI从.Net文件系统API更新文件夹内容。
public void PrintQueue()
{
    DirectoryInfo di = new DirectoryInfo(directoryLocation);
    foreach (FileInfo fi in di.GetFiles().OrderByDescending(d => d.LastWriteTime))
    {
        listBox1.Items.Add(directoryLocation + fi);
    }
}