c# - 复制大文件时Forms application "Not Responding"?

标签 c# winforms file progress-bar copying

我正在开发一个文件管理器应用程序。这些文件通常为 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();
}

我知道这看起来应该是一件简单的事情,但我这辈子似乎找不到任何类型的示例来执行此操作而不使用直接 API 调用或其他任何方式。我必须在这里遗漏一些东西,所以如果有人能让我走上正确的轨道,我将非常感激。

提前致谢!

最佳答案

你应该使用 BackgroundWorker在您的表格上进行复制。它将允许文件副本在单独的线程上完成,并让您的 UI 响应。这会增加一些复杂性,但 BackgroundWorker 会为您处理很多管道。但是,有很多 exampleswhat you want to do .

关于c# - 复制大文件时Forms application "Not Responding"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/844482/

相关文章:

c# - Process.Start(ProcessStartInfo) 不会将命令行发送到屏幕保护程序(.scr 文件)

c# - Azure devops 在部署时在多个数据库上执行 ef core (.Net core 3.0) 迁移 sql 脚本(来自项目存储库)

c# - 如何异步使用 DataAdapter.Fill()?

c - 从文件中读取未知数量的整数

c - 从 C 语言文件中读取、处理和输出数字

c++ - 为什么 'new line' 偏移 .txt 文件中的所有字符字节位置 +1?

c# - Json.Net 将复杂对象序列化为 Xml 属性和值

c# - Web 部署添加额外的连接字符串(添加相同的连接两次)

c# - 如何在 C# 中刷新表单?

c# - 字符串的正则表达式以数字开头,后跟字母