c# – 是否可以在不等待结果的情况下“启动”(大)文件的副本?
发布时间:2020-12-15 23:48:55 所属栏目:百科 来源:网络整理
导读:我认为这在标题中非常明显;我想复制文件而不等待结果. 我想要这个: static void Main(string[] args) { string strCmdText = @"/C xcopy c:usersfloriandesktopmytestfile.fil p:"; System.Diagnostics.Process.Start("CMD.exe",strCmdText); Console.
我认为这在标题中非常明显;我想复制文件而不等待结果.
我想要这个: static void Main(string[] args) { string strCmdText = @"/C xcopy c:usersfloriandesktopmytestfile.fil p:"; System.Diagnostics.Process.Start("CMD.exe",strCmdText); Console.WriteLine("Finished !"); } 基本上我的主线程在几毫秒后释放. static void Main(string[] args) { var t = Task.Run(() => Copy(@"c:UsersflorianDesktopmytestfile.fil","p:")); } private static void Copy(string source,string destination) { using (FileStream SourceStream = File.Open(source,FileMode.Open)) { using (FileStream DestinationStream = File.Create(destination + source.Substring(source.LastIndexOf('')))) { SourceStream.CopyToAsync(DestinationStream); } } } 我的mytestfile.fil是在我的目标文件夹中创建的,但其大小为0kb. 问候, 解决方法
你必须以某种方式让这个过程保持活力.最简单的方法 – 如果你真的必须在自己的线程上进行文件复制 – 就是在前台线程上执行你的Copy方法: class Program { static void Main(string[] args) { System.Threading.Thread thread = new System.Threading.Thread(()=> Copy(@"c:UsersflorianDesktopmytestfile.fil","p:")); thread.Start(); } private static void Copy(string source,FileMode.Open)) { using (FileStream DestinationStream = File.Create(destination + source.Substring(source.LastIndexOf('')))) { SourceStream.CopyTo(DestinationStream); } } } } …或者您可以在主线程上执行它,因为您的应用程序似乎没有其他任何东西: class Program { static void Main(string[] args) { string source = @"c:UsersflorianDesktopmytestfile.fil"; string destination = "p"; using (FileStream SourceStream = File.Open(source,FileMode.Open)) { using (FileStream DestinationStream = File.Create(destination + source.Substring(source.LastIndexOf('')))) { SourceStream.CopyTo(DestinationStream); } } } } 第三个选项是使您的方法异步并等待它在Main方法中同步完成: class Program { static void Main(string[] args) { CopyAsync(@"c:UsersflorianDesktopmytestfile.fil","p:").Wait(); } private static async Task CopyAsync(string source,FileMode.Open)) { using (FileStream DestinationStream = File.Create(destination + source.Substring(source.LastIndexOf('')))) { await SourceStream.CopyToAsync(DestinationStream); } } } } 请注意,除非您实际等待它,否则不应使用异步CopyToAsync方法.不要混用同步和异步代码:) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |