在后台复制文件
本文关键字:文件 复制 后台 | 更新日期: 2023-09-27 17:56:46
当我将客户端连接到服务器时,客户端开始将一些dll文件复制到服务器。发生这种情况时,表单会卡住,直到复制完成(有一些大文件)。
我希望使此副本在后台运行,因为我希望用户能够继续与表单交互(打开一些浏览对话框等)我将确保复制完成。
我想线程在这里会有所帮助,但我是线程的新手,我也不确定这是这样做的方法。
以下是复制 dll 文件的代码:
private bool copyDllsToServer()
{
//string targetPath = @"''" + remoteIpAddress + "''" + userName + batchRunPath;
string targetPath = "Z:''nBatcher''" + userName + batchRunPath;
if (!Directory.Exists(targetPath))
Directory.CreateDirectory(targetPath);
else
{
Directory.Delete(targetPath, true);
Directory.CreateDirectory(targetPath);
}
for (int i = 0; i < listOfFilesToCopy.Count; i++)
{
if (listOfPathToCopy[i].CompareTo(omekPath + shadersPath) == 0)
{
if (!Directory.Exists(targetPath + "Shaders"))
Directory.CreateDirectory(targetPath + "Shaders");
if (!File.Exists(targetPath + "Shaders''" + listOfFilesToCopy[i]))
File.Copy(listOfPathToCopy[i] + listOfFilesToCopy[i], targetPath + "Shaders''" + listOfFilesToCopy[i], true);
}
else
{
if (!File.Exists(targetPath + listOfFilesToCopy[i]))
File.Copy(listOfPathToCopy[i] + listOfFilesToCopy[i], targetPath + listOfFilesToCopy[i], true);
}
}
return true;
}
有什么想法吗?
我会为此使用BackgroundWorker
(基本上将线程池线程包装在一个不错的组件中以放在表单上,并使编组到 UI 线程更容易一些)。如果需要,您还可以使用事件来报告复制功能的进度。
有关 MSDN - http://msdn.microsoft.com/en-us/library/cc221403(v=vs.95) 的教程,请参阅此处.aspx
不过,我要提醒一个警告。仅在单个线程中执行密集的文件操作,因为使用并发线程可能会遇到磁盘 I/O 问题。
var bg = new BackgroundWorker();
bg.DoWork += (s1,e1) => copyDllsToServer();
bg.RunWorkerAsync();