0

我正在使用结合 C# 的 php 脚本将文件从 Windows 中的文件夹上传到网络服务器目录。它可以工作,但是,当上传开始时,应用程序会冻结。

private void submitExam_Click(object sender, EventArgs e)
{
    // loop through and upload our sound bits
    string[] files = System.IO.Directory.GetFiles(System.Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments) + "\\wav", "*.wav", System.IO.SearchOption.AllDirectories);
    foreach (string soundBit in files)
    {
        System.Net.WebClient Client = new System.Net.WebClient();
        Client.Headers.Add("Content-Type", "audio/mpeg");
        byte[] result = Client.UploadFile("http://website.com/uploadFiles.php", "POST", soundBit);
    }

    processing f2 = new processing();
    f2.MdiParent = this.ParentForm;
    f2.StartPosition = FormStartPosition.CenterScreen;
    f2.Show();
    this.Hide();
}

在 C# 应用程序中,当单击提交按钮时,上传开始,并显示一个新的表单页面,其中显示一条消息,说明正在上传文件。我遇到的问题是,当按下提交按钮时,processing表单不会显示大约 10 秒左右,直到上传完成或接近完成。

有没有办法在不冻结应用程序的同时上传文件的同时显示处理页面?

4

1 回答 1

3

应用程序冻结是因为您的上传操作阻塞了需要始终保持其运行循环始终运行的状态的主 UI 线程。

您还需要确保在上传操作完成时更新主线程上的 UI。

主线程有时也称为 UI 线程,是您的 Windows 窗体应用程序用来处理用户输入、响应事件、更新 UI 控件等的线程。

冻结行为是因为您的上传操作需要大约 10 秒才能完全上传文件,因此您的应用在此过程完成之前无法响应。如果上传耗时 20 分钟,您的应用将冻结 20 分钟。

有关如何避免此问题的更多信息,请参阅此帖子:Doing series of actions without blocking UI Thread

于 2013-08-01T20:59:36.577 回答