2013-08-01 49 views
0

我正在使用與C#結合的php腳本將文件從Windows中的文件夾上載到Web服務器目錄中。它的工作原理,但是,當上傳開始時,應用程序凍結。使用php上傳文件 - 凍結

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

試試這個控制:http://www.asp.net/ajaxLibrary/AjaxControlToolkitSampleSite/AsyncFileUpload/AsyncFileUpload.aspx編輯:你在做什麼基本上尋找是一種上傳文件的異步方式,然後通知它已完成上傳。有很多方法可以做到,只需搜索「asp.net異步文件上傳」 –

+0

@JesseSmith,感謝您的建議,但是,我沒有使用ASP,而是一個桌面應用程序。 – Spencer

+0

啊!授予@Ralph說,這個問題是由阻塞UI線程引起的 - 最終結果仍然是某種形式的異步 –

回答

3

應用程序凍結,因爲您的上傳操作阻止了主UI線程,需要始終保持其運行循環爲始終運行的狀態。

您還需要確保在上載操作完成時更新主線程上的UI。

主線程有時也稱爲UI線程是您的Windows窗體應用程序使用處理用戶輸入,響應事件,更新UI控件線程等

凍結行爲是因爲你的上傳操作需要大約10秒鐘才能完全上傳文件,因此在完成此過程之前,您的應用程序無法響應。如果上傳需要20分鐘,您的應用程序將凍結20分鐘。

看到這個職位有關如何避免此問題的詳細信息:Doing series of actions without blocking UI Thread

+0

太棒了!我真的不知道這存在。添加它,它的工作原理應該如此。非常感謝您的分享。 – Spencer

+0

@Spencer不用客氣,請考慮將我的答案標記爲「已回答」。 –

+0

我當然會 - 我必須再等3分鐘才能接受它。乾杯! – Spencer