2016-07-14 16 views
-1

私は、ペイントイベントを使用してアニメーションの背景を持つウィンドウを作成したい。このよう :正常に動作しますが、私は何かを行うcan'tC#Winフォームの背景アニメーション

using System; 
using System.Drawing; 
using System.Windows.Forms; 
using System.Threading; 

namespace DrawGUI 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Paint(object sender, PaintEventArgs e) 
     { 
      Graphics g = e.Graphics; 
      int w = this.ClientSize.Width; 
      int h = this.ClientSize.Height; 

      g.DrawLine(Pens.Red, 0, h/2 - 20, w, h/2 - 20); 

      int a = 0; 
      while (true) 
      { 
       a++; 
       g.DrawRectangle(Pens.Gray, a, h/2 - 20, 40, 40); 
       g.DrawRectangle(Pens.Red, a, h/2 - 20, 40, 40); 
       Thread 
      } 
     } 
    } 
} 

。バックグラウンドでペイントイベントを実行するにはどうすればよいですか?

+0

もちろん、何もできません。無限ループです。 – Kinetic

+0

基本的なアニメーションテクニックに関する本を入手する必要があります。これは実際にこのタイプの基本的なチュートリアルのフォーラムではありません – edtheprogrammerguy

答えて

2

Paintイベントをバックグラウンドで実行することはできません。それはGUIスレッドで常に発生し、バックグラウンドスレッドから描画を試みると、スレッド間エラーが発生します。バックグラウンドスレッドからControlを変更するのは不正です。あなたはPaintイベントハンドラ内のあなたのwhileループの代わりに何をしたいのか

は頻繁使用すると、表示を更新したいと発射Timerを設定し、そのタイマーのTickハンドラ呼び出しInvalidate()にすることです。次に、Paintイベントハンドラで、Controlのフィールドを使用している繰り返しを追跡し、それに応じて描画します。

+0

ありがとう、私はそれを試してみるつもりです –

関連する問題