我正在使用结合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秒左右才会显示,直到上传完成或接近结束。
有没有办法显示处理页面,同时上传文件而不冻结应用程序?
答案 0 :(得分:3)
应用程序正在冻结,因为您的上传操作阻止了主UI线程,该主线程需要始终保持其运行循环始终运行的状态。
您还需要确保在上传操作完成后更新主线程上的UI。
主线程有时也称为UI线程,是Windows窗体应用程序用来处理用户输入,响应事件,更新UI控件等的线程。
冻结行为是因为您的上传操作大约需要10秒才能完全上传文件,因此在此过程完成之前您的应用无法响应。如果上传需要20分钟,您的应用会冻结20分钟。
有关如何避免此问题的详细信息,请参阅此帖子:Doing series of actions without blocking UI Thread