使用php post上传文件 - 冻结

时间:2013-08-01 20:57:13

标签: c# winforms

我正在使用结合C#的PHP脚本将文件从Windows文件夹上传到webserver目录。但是,当上传开始时,应用程序会冻结。

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秒左右才会显示,直到上传完成或接近结束。

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

1 个答案:

答案 0 :(得分:3)

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

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

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

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

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