Flo*_*ian 3 c# asynchronous xcopy task-parallel-library
我认为这在标题中非常明显; 我想复制文件而不等待结果.
我想要这个:
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 !");
}
Run Code Online (Sandbox Code Playgroud)
基本上我的主线程在几毫秒后释放.我尝试这样做:
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的mytestfile.fil是在我的目标文件夹中创建的,但其大小为0kb.
问候,
基本上我的主线程在几毫秒后释放.我试着这样做
你必须以某种方式让这个过程保持活力.最简单的方法 - 如果你真的必须在自己的线程上进行文件复制 - 就是在前台线程上执行你的Copy方法:
class Program
{
static void Main(string[] args)
{
System.Threading.Thread thread = new System.Threading.Thread(()=> Copy(@"c:\Users\florian\Desktop\mytestfile.fil", "p:"));
thread.Start();
}
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.CopyTo(DestinationStream);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
...或者您可以在主线程上执行它,因为您的应用程序似乎没有其他任何东西:
class Program
{
static void Main(string[] args)
{
string source = @"c:\Users\florian\Desktop\mytestfile.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);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
第三个选项是使您的方法异步并等待它在Main方法中同步完成:
class Program
{
static void Main(string[] args)
{
CopyAsync(@"c:\Users\florian\Desktop\mytestfile.fil", "p:").Wait();
}
private static async Task CopyAsync(string source, string destination)
{
using (FileStream SourceStream = File.Open(source, FileMode.Open))
{
using (FileStream DestinationStream = File.Create(destination + source.Substring(source.LastIndexOf('\\'))))
{
await SourceStream.CopyToAsync(DestinationStream);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,除非您实际等待它,否则不应使用异步CopyToAsync方法.不要混用同步和异步代码:)
| 归档时间: |
|
| 查看次数: |
116 次 |
| 最近记录: |