问题描述

我已经编写了一个备份管理器项目,该项目提供了一个文件夹,它将每个文件和文件夹都复制到另一个位置,依此类推。

它可以工作(很好地完成了复制作业),但是在复制过程中(大约需要1分钟),应用程序UI不会响应。我听说过线程,并且看到过并行编程一词(仅此而已),现在我需要一些解释,比较和示例,以能够切换我的代码。

我之前对线程做过非常简单的操作,但是很久以前,我对线程还没有足够的信心。这是我的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
private void CopyFiles(string path, string dest)
{
System.IO.Directory.CreateDirectory(dest + "\\" + path.Split('\\')[path.Split('\\').Count()-1]);
dest = dest + "\\" + path.Split('\\')[path.Split('\\').Count() - 1];
foreach (string file in System.IO.Directory.GetFiles(path))
{
System.IO.File.Copy(file, dest + "\\" + file.Split('\\')[file.Split('\\').Count() - 1]);
}
foreach (string folder in System.IO.Directory.GetDirectories(path))
{
CopyFiles(folder, dest);
}
}

我会根据特定的时间间隔在计时器中运行此程序,如果我使用线程,是否应该省略计时器?带领我,我很困惑。

最佳答案

由于您没有足够的线程信心,因此我强烈建议您阅读Joe Albahari’s Threading in C# Tutorial。并行编程是指您以“并行”方式或同时进行多项操作(主要是将大量计算分散在多个CPU或GPU内核上)。在这种情况下,您希望线程在复制所有文件时使您的UI响应。从本质上讲,您将具有如下所示的内容:(在阅读了C#教程中的线程之后)

1
2
3
4
5
Thread copyFilesThread = new Thread(() => 
{
CopyFiles(path, dest);
});
copyFilesThread.Start();

UI在其自己的线程上运行。放入您的应用程序中的所有代码都将在UI线程上运行(除非您显式使用线程)。由于您的CopyFiles方法需要很长时间,因此它将停止UI,直到复制作业完成。使用线程将在UI线程的单独线程上运行CopyFiles,因此使UI线程响应。

编辑:至于您的计时器,它多久运行一次?
关于c# - 用户界面在复制大量文件期间不响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14018567/


相关链接(侵删)

  1. c# - 用户界面在复制大量文件期间不响应

=================我是分割线=================

欢迎到公众号来唠嗑: