0

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 秒間表示されないことです。

アプリケーションをフリーズせずにファイルを同時にアップロードしながら、処理ページを表示する方法はありますか?

4

1 に答える 1

3

実行ループが常に実行されている状態を常に維持する必要があるメイン UI スレッドがアップロード操作によってブロックされているため、アプリケーションがフリーズしています。

また、アップロード操作が完了したら、メイン スレッドで UI を更新する必要があります。

UI スレッドとも呼ばれるメイン スレッドは、Windows フォーム アプリがユーザー入力の処理、イベントへの応答、UI コントロールの更新などに使用するスレッドです。

フリーズ動作は、アップロード操作がファイルを完全にアップロードするのに約 10 秒かかるため、このプロセスが完了するまでアプリが応答できないためです。アップロードに 20 分かかった場合、アプリは 20 分間フリーズします。

この問題を回避する方法の詳細については、次の投稿を参照してください: UI スレッドをブロックせずに一連のアクションを実行する

于 2013-08-01T20:59:36.577 に答える