【发布时间】:2017-04-27 13:55:15
【问题描述】:
我认为这在标题中很明显;我想在不等待结果的情况下复制文件。
功能上我想要这个:
static void Main(string[] args)
{
string strCmdText = @"/C xcopy c:\users\florian\desktop\mytestfile.fil p:\";
System.Diagnostics.Process.Start("CMD.exe", strCmdText);
Console.WriteLine("Finished !");
}
基本上我的主线程在几毫秒后被释放。 我尝试这样做:
static void Main(string[] args)
{
var t = Task.Run(() => Copy(@"c:\Users\florian\Desktop\mytestfile.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。
问候,
【问题讨论】:
-
在您的主程序中,您必须等待任务完成(Task.Wait(...))。否则控制台退出并终止工作线程
-
那么...第一种方法有什么问题(使用
cmd.exe和Process.Start)?如果这就是你想要的,那它对你不起作用怎么办? -
@samir 是的,但我不想等待 ;-)
-
您无法关闭该进程,并且您在同一进程中启动的线程仍然在运行。进程拥有线程,当进程结束时它们将被终止。这就是为什么您必须按照我在回答中的建议以某种方式保持流程(应用程序)的活力。
-
除非在异步调用之后发生处理,否则主线程将退出,并带走孩子。如果您在文件写入完成之前无法继续处理,我认为不需要发生这种情况。您将无法避免等待童工...
标签: c# asynchronous task-parallel-library xcopy