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

わんくま同盟

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

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


(過去ログ 51 を表示中)
■27657 / )  Re[7]: C#タイマーでのpictureBox.Image更新nitu
□投稿者/ フミ (4回)-(2008/11/11(Tue) 21:09:08)
2008/11/11(Tue) 21:11:47 編集(投稿者)

倉田様、Jitta on the way様

ご返信ありがとうございます。
タイマーに関しては、
ご助言のようにして確認中です。

実は1つ試したことがあります。
以下のようなプログラムを試しました。
ボタンを押すと
スレッド上で1つのピクチャーボックスに
何度もBmp(512×512)の絵を入れ替えるというものだけのものです。
これだけで、
全く同じエラー
>System.InvalidOperationException: オブジェクトは現在他の場所で使用されています。
がでてしまいます。
ただ1つのスレッドだけでも、スレッドを用いると
中の処理(setPicture)は上から順番に処理されるのではなく、
細切れに実行されてしまうのですか??
すいません、初心者なのでここのところがよくわかりません。。。
pictureBox1に絵を入れる操作が同時に行われてしまうせいで、
オブジェクトは他の場所で使われているというエラーがでるということですよね??

以下のプログラムだとエラーがでますが、
t.start()の後に、
t.join()で
待ってあげると
エラーはでませんでした。
やはりブロックとかが関係しているのでしょうか。
だからGUIスレッドにwindows.Form.timerをおいて処理をさせればよいということですか。


以下プログラム

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

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
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;
}
}

private void button1_Click(object sender, EventArgs e)
{
Thread t = new Thread(new ThreadStart(setPicture));
t.Start();
}
}
}
返信 編集キー/


管理者用

- Child Tree -