C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 51 を表示中)
■27721 / )  Re[11]: C#タイマーでのpictureBox.Image更新nitu
□投稿者/ Jitta (537回)-(2008/11/12(Wed) 21:57:07)
Jitta さんの Web サイト
No27702 (フミ さん) に返信
> 最初の質問(■No27520)のプログラムの修正
> 
> 
> 
> 以下修正版プログラム
> 
> using System;
> using System.Windows.Forms;
> using System.Threading;
> using System.Drawing;
> 
> namespace WindowsFormsApplication1
> {
>     public partial class Form1 : Form
>     {
>         //画面表示用デリゲート
>         private delegate void SetImageCallback(Bitmap inBmp);
> 
>         //画面更新用タイマー
>         private System.Timers.Timer timeTimer;
> 
>         //再入防御用フラグ
>         private int syncPoint = 0;
> 
>         //メインフォーム
>         public Form1()
>         {
>             //コンポーネントの初期化
>             InitializeComponent();
> 
>             //タイマーの生成
>             timeTimer = new System.Timers.Timer(10);
>             timeTimer.Elapsed += new System.Timers.ElapsedEventHandler(timeTimer_Elapsed);
>             timeTimer.Enabled = true;
>         }
> 
>         //タイマーのイベント
>         void timeTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
>         {
>             //再入の防止
>             if (Interlocked.CompareExchange(ref syncPoint, 1, 0) == 0)
>             {
>                 //絵の更新
>                 setPicture();
>                 syncPoint = 0;
>             }
>             else
>             {
>                 //何もしない
>             }
> 
>         }
> 
>         //絵の更新用メソッド
>         private void setPicture()
>         {
>             SetBmp(Properties.Resources.aaaaa);//絵1
>             SetBmp(Properties.Resources.bbbbb);//絵2
>         }

ここで2つの絵を差し替えていますが、aaaaa の方は、表示されますか?
それとも、bbbbb の読み込みに時間がかかるので、その間は表示されているのでしょうか?
setPicture に入ってきた回数で、aaaaa と bbbbb を入れ替えればいいのでは?
また、2つしかないのなら、PictureBox を2つ用意し、表示/非表示を切り替えるようにすれば、もっと高速に表示できますよね?
> 
>         //画面表示用デリゲート
>         private void SetBmp(Bitmap inBmp)
>         {
>             if (this.pictureBox1.InvokeRequired)
>             {
>                 SetImageCallback d = new SetImageCallback(SetBmp);
>                 this.Invoke(d, new object[] { inBmp });
>             }
>             else
>             {
>                 this.pictureBox1.Image = inBmp;
>             }
>         }
>     }
> }
> 

返信 編集キー/


管理者用

- Child Tree -