2012-05-08 6 views
0

私はDLLを使って参照される2つの子フォーム(スタンドアロンプ​​ロジェクトが参照に追加されています)を含むC#でMDIアプリケーションを作成しています。 子フォーム(form1と呼ぶ)は、タイマーを使用してグラフィックオブジェクトに基づいてアニメーションを実行しています。このプロジェクト(子フォーム1)は、他の子フォーム(form2と呼ぶ)がロードされるまで正常に動作します。最初のフォーム(form1)のアニメーションは停止しますが、この2番目の子フォーム(form2)を閉じるとアニメーションは問題なく続きます。2つのMDI子フォームが互いに干渉します

私はForm2の中で、このコードを使用します。

private void FlyingBeeForm_Paint(object sender, PaintEventArgs e) { 
    Graphics g = e.Graphics; 
    DrawImages(g); 
    System.Threading.Thread.Sleep(50); 
    this.Invalidate(); 
} 
+0

2番目のフォームは特別ですか?私たちが知っていることはすべて魚です。手掛かりがない場合は、2番目の形式でコードのチャンクをコメントアウトしてください。 –

+0

これはアニメーションですが、タイマーはありません。どのようなform2(魚)は、マウスをクリックすると、魚はクリックした場所に移動 – falcon2303

+0

まあ、あなたはほとんど確実に魚をアニメーションするためにタイマーを使用する必要があります。ループすると、1番目のフォームのタイマーが機能しなくなります。 –

答えて

1

タイマはインターバルが経過したときに、Windowsが提供する通知で行く保たれています。しかし、それは非常に低い優先度の通知です。他の作業を行う必要がない場合にのみ通知されます。

これで、Paintイベントハンドラの問題が表示されるはずです。 1つは、の作業が絶えず眠らないようにすることです。その後、が常にであることをInvalidate()を呼び出して確認します。したがって、Windowsでは新しいペイントイベントが生成され、タイマーイベントを配信できる状態にはなりません。

スリープおよび無効化コールを削除する必要があります。代わりに50ミリ秒のタイマーを使用してください。 TickイベントハンドラでInvalidate()を呼び出すだけです。

+0

でスピードアップしますが、この別のフォーム(form2)のウィンドウをクリックして移動すると、アニメーションは(フォーム1)でスピードアップし、逆も同様です。 – falcon2303

+0

Paintイベントハンドラを修正すると、これも解決されていると私は信じています。そうでない場合は、新しい質問を開始してください。 –

+0

OK、すばやく便利な返信をいただきありがとうございます – falcon2303

関連する問題