2016-06-01 17 views
0

ファイルを確認しながら待機GIFを表示したいと思いますが、これまでに試したことがあります。
Form1は、ユーザーがファイルを確認するためにボタンをクリックするフォームと、別のフォームがあります.Gitイメージを表示するピクチャボックスだけがあります。長時間実行するプロセスのWinformsでモーダルロードウィンドウを表示

button_click() 
{ 
    Wait wait = new Wait(); 
    wait.ShowDialog(); 
    VerifyFile(); 
    wait.Close(); 
} 

待機フォームは表示されますが、終了しません。また、検証も行われません。これは、Waitフォームを手動で閉じるときにのみ続行されます。 VerifyFile()が完了したら、待機フォームを自動的に閉じる方法。

+0

コールバック、デリゲート、および非同期プロセスの作成を調べる必要があります。あなたが待っているプロセスは、待ち状態のフォームが終了したときに待ち状態になるようにコールバックを行う必要があります。プログレスバーが必要な場合は、長時間実行されているプロセスでさらにコールバックが必要になります。これはあなたの最善の策になるでしょう。私がまだやったことではありませんが、私はそれが私の経験で終わったのを見ました。 –

+0

[2番目のwinformを非同期に開きますが、それでも親フォームの子として動作しますか?](http://stackoverflow.com/questions/2435752/open-a-second-winform-asynchronously-but-still-behave -as-a-child-to-the-parent-f) – NineBerry

答えて

0

あなたのコードの問題は、Form.ShowDialog()メソッドが同期しており、 "Form"ダイアログからの結果を待つことです。これは、「実行待ち」ダイアログが閉じられるまでコード実行が保持されていることを意味します。

待機ダイアログにVerifyFile()メソッドを移動することを検討:VerifyFile後の上を実行したときに

class Wait: Form 
{ 
    public Wait() : base() 
    { 
     System.Threading.Tasks.Task.Factory.StartNew(() => VerifyFile()); 
    } 
} 

このダイアログを閉じることができます。

+0

何かが進行中であることを示すためのフォームにタスクを移動させるのは良い設計ではありません。 –

+1

全体的なOOPデザインは一つの大きな間違いですが、まだ人々はそれを使用しています...私はここから人々が "デザインパターン"などを気にする理由を知りません。あなたが創造的なものにしたいのであれば、 "よく設計された"例を示すためにたくさんのコード行を投稿してください。 –

関連する問題