質問

かなり長いプロセスの実行中に進捗メッセージを表示するフォームがあります。これはWebサービスの呼び出しであるため、進行状況バーに完全な割合の数字を有意義に表示することはできません。 (私はプログレスバーのマーキープロパティが特に好きではありません)

アニメーションGIFを表示して、プロセスに何らかのアクティビティの感触を与えたい(たとえば、Windowsコピープロセスのように、あるコンピューターから別のコンピューターにファイルが飛んでいる)。

これをどうやって行うのですか?

役に立ちましたか?

解決

それほど難しくありません。

  1. ピクチャボックスをフォームにドロップします。
  2. .gifファイルを画像として画像ボックスに追加
  3. ロード中にピクチャボックスを表示します。

考慮事項:

  • pictureboxを無効にすると、gifがアニメーション化されなくなります。

アニメーションGIF:

アニメーションGIFを探している場合は、ここ

で生成できます。

別の方法:

非常にうまく機能する別の方法は、コードプロジェクト

他のヒント

同じ問題がありました。バックグラウンドでの長時間の操作により、フォーム全体(gifを含む)が再描画を停止します。ここに私がこれを解決した方法があります。

  private void MyThreadRoutine()
  {
   this.Invoke(this.ShowProgressGifDelegate);
   //your long running process
   System.Threading.Thread.Sleep(5000);
   this.Invoke(this.HideProgressGifDelegate);
  }

  private void button1_Click(object sender, EventArgs e)
  {
   ThreadStart myThreadStart = new ThreadStart(MyThreadRoutine);
   Thread myThread = new Thread(myThreadStart);
   myThread.Start(); 
  }

この操作を担当する別のスレッドを作成しました。この初期フォームのおかげで、問題なく再描画を続けています(私のgifの動作を含む)。 ShowProgressGifDelegateおよびHideProgressGifDelegateは、gifでpictureBoxの表示プロパティをtrue / falseに設定するフォームのデリゲートです。

Windowsでは、伝統的にアニメーション化されたGifは使用しませんが、AVIアニメーションはほとんど使用しないことに注意してください。それらを表示するためのWindowsネイティブコントロールがあります。アニメーション化されたGifをAVI(およびその逆)に変換するツールもあります。

PictureBoxコントロールに配置すると、機能するはずです

あなたが同じスレッドにいるのですべてが停止するので、長い操作を遅れて開始するときはそうではありません。

私は同じ問題を抱えており、いくつかの異なる問題に直面していたものを実装することで異なるソリューションに出くわしました。最後に、期待通りに機能するさまざまな投稿の一部をまとめたものを以下に示します。

private void btnCompare_Click(object sender, EventArgs e)
{
    ThreadStart threadStart = new ThreadStart(Execution);
    Thread thread = new Thread(threadStart);
    thread.SetApartmentState(ApartmentState.STA);
    thread.Start();
}

これは、PictureBoxコントロールの呼び出しも実行するExecutionメソッドです。

private void Execution()
{
    btnCompare.Invoke((MethodInvoker)delegate { pictureBox1.Visible = true; });
    Application.DoEvents();

    // Your main code comes here . . .

    btnCompare.Invoke((MethodInvoker)delegate { pictureBox1.Visible = false; });
}

PictureBoxは、[プロパティ]ウィンドウから非表示にするか、以下を実行してください:

private void ComparerForm_Load(object sender, EventArgs e)
{
    pictureBox1.Visible = false;
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top