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

わんくま同盟

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

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


(過去ログ 51 を表示中)
■27697 / )  Re[9]: C#タイマーでのpictureBox.Image更新nitu
□投稿者/ フミ (5回)-(2008/11/12(Wed) 15:53:28)
No27663(Jitta様)に返信

ご助言ありがとうございます!
教えていただいた
http://msdn.microsoft.com/ja-jp/library/ms171728.aspx
を参考にして■No27657のプログラムは
エラー(>System.InvalidOperationException: オブジェクトは現在他の場所で使用されています。)
がでなくなりました。
下記のように修正しました。
ピクチャーボックスにデリゲートを通じて絵をわたしました。

あと最初の質問時のタイマーのやつですが、
windows.forms.timerだと処理中に操作ができなくなってしまいました。
無謀な時間での大きいサイズの絵の更新の問題は置いておくとして、
タイマーイベントで描画中にも画面にあるボタンを押したりするには、
windows.forms.timerだとダメですか??




以下プログラム

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

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
//画面表示用デリゲート
public delegate void SetImageCallback(Bitmap inBmp);

public Form1()
{
InitializeComponent();
}
private void setPicture()
{
for (int i = 0; i < 20000; i++)
{
//pictureBox1.Image = Properties.Resources.aaaaa;
//pictureBox1.Image = Properties.Resources.bbbbb;
//pictureBox1.Image = Properties.Resources.aaaaa;
//pictureBox1.Image = Properties.Resources.bbbbb;
//pictureBox1.Image = Properties.Resources.aaaaa;
//pictureBox1.Image = Properties.Resources.bbbbb;
//pictureBox1.Image = Properties.Resources.aaaaa;
//pictureBox1.Image = Properties.Resources.bbbbb;
//
// ↓下記に変更
//

SetBmp(Properties.Resources.aaaaa);
SetBmp(Properties.Resources.bbbbb);
SetBmp(Properties.Resources.aaaaa);
SetBmp(Properties.Resources.bbbbb);
SetBmp(Properties.Resources.aaaaa);
SetBmp(Properties.Resources.bbbbb);
SetBmp(Properties.Resources.aaaaa);
SetBmp(Properties.Resources.bbbbb);

}
}

private void button1_Click(object sender, EventArgs e)
{
Thread t = new Thread(new ThreadStart(setPicture));
t.Start();
}

//画面表示用デリゲート
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 -