复制大文件时表单应用程序"无响应"?

Aar*_*ron 2 c# file copying winforms progress-bar

我有一个我正在处理的文件管理器应用程序.这些文件通常为500MB到2GB.一切正常,但应用程序"停止响应"非常烦人.我想做的是逐字节或兆字节复制,每次读/写操作后都有一些Application.DoEvents().沿着这些方向,我不知道实际使用的类是什么,所以我只是想做些什么:)

private void CopyFile(string inFilename, string outFilename)
{
    FileReader inReader(inFilename);
    FileWriter outWriter(outFilename, FileMode.OpenOrCreate);

    byte theByte;
    while (theByte = inReader.ReadByte())
    {
        outWriter.WriteByte(theByte, WriteMode.Append);
        UpdateProgressBar();
        Application.DoEvents();
    }

    inReader.CloseFile();
    outWriter.CloseFile();
}
Run Code Online (Sandbox Code Playgroud)

我知道这似乎应该是一件简单的事情,但是对于我的生活,我似乎无法找到任何一种不使用直接API调用或其他方式的例子.我必须在这里遗漏一些东西,所以如果有人能让我走在正确的轨道上,我真的很感激.

提前致谢!

JP *_*oto 6

您应该在表单上使用BackgroundWorker进行复制.它将允许文件副本在单独的线程上完成,并让您的UI响应.虽然增加了一些复杂性,但BackgroundWorker会为您处理大量的管道工作.但是,也有很多的例子,你想要做什么.