tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルVB2005でのスレッド処理
記事No8847
投稿日: 2009/04/06(Mon) 20:47
投稿者コンタクト
環境 VB2005

はじめまして、VB2005の勉強を最近始めました。

タイマー処理を別クラスのスレッドで行い
1秒ごとの経過を、FormのLabelで表示するところで悩んでいます。

別クラスのスレッドを実行しながら
別クラスのスレッド内は無限ループにしてあるので
スレッドが起動したら、終了するまで値を渡せないと思うのですが
別クラスのスレッド内の値をFormのLabelに渡すことは出来るのでしょうか。

A Class
 sub A Load()
  c.Start()
  Label.text =値
 End sub
End Class

B Class
 'スレッド処理
 public sub c()
  Do
   ここで値をFormに渡したい。
  Loop
 End Sub
End Class

[ツリー表示へ]
タイトルRe: VB2005でのスレッド処理
記事No8848
投稿日: 2009/04/06(Mon) 22:11
投稿者魔界の仮面弁士
> VB2005の勉強を最近始めました
2005 の場合、スレッド処理には BackgroundWorker クラスを使うと楽ですよ。

> タイマー処理を別クラスのスレッドで行い
どの Timer クラスですか?

> 1秒ごとの経過を、FormのLabelで表示するところで悩んでいます。
System.Windows.Forms.Timer を使うようにしてやれば、
スレッドを分ける必要は無いような…。

> 別クラスのスレッド内は無限ループにしてあるので
何らかのループ終了条件は設けておくべきかと。

> スレッドが起動したら、終了するまで値を渡せないと思うのですが
ワーカースレッドから BeginInvoke / Invoke メソッドを呼び出して、
メインスレッドにラベルの修正を依頼するようにします。

[ツリー表示へ]
タイトルRe^2: VB2005でのスレッド処理
記事No8851
投稿日: 2009/04/07(Tue) 06:42
投稿者コンタクト
回答有難うございます。
> > VB2005の勉強を最近始めました
> 2005 の場合、スレッド処理には BackgroundWorker クラスを使うと楽ですよ。
>今は、BackgroundWorkerを使わないで勉強中です。
>
> > 1秒ごとの経過を、FormのLabelで表示するところで悩んでいます。
> System.Windows.Forms.Timer を使うようにしてやれば、
> スレッドを分ける必要は無いような…。
> Timerクラスを使用しないで、時間処理を行おうと考えてます。

> > 別クラスのスレッド内は無限ループにしてあるので
> 何らかのループ終了条件は設けておくべきかと。
>ループ終了させずに毎回一秒ごとに時間をFormに送りたいと
考えてます。

> > スレッドが起動したら、終了するまで値を渡せないと思うのですが
> ワーカースレッドから BeginInvoke / Invoke メソッドを呼び出して、
> メインスレッドにラベルの修正を依頼するようにします。
Invokeを使うにはデリゲート宣言?が必要なのを昨日見つけましたが
いまいち理解できずに逃げてました。避けては通れないようなので
今一度勉強してみます。

[ツリー表示へ]
タイトルRe^3: VB2005でのスレッド処理
記事No8852
投稿日: 2009/04/07(Tue) 14:29
投稿者YuO
> > > スレッドが起動したら、終了するまで値を渡せないと思うのですが
> > ワーカースレッドから BeginInvoke / Invoke メソッドを呼び出して、
> > メインスレッドにラベルの修正を依頼するようにします。
> Invokeを使うにはデリゲート宣言?が必要なのを昨日見つけましたが
> いまいち理解できずに逃げてました。避けては通れないようなので
> 今一度勉強してみます。

一応,.NET Framework 2.0からはAction(Of T)という汎用のデリゲートが定義されています。
http://msdn.microsoft.com/ja-jp/library/018hxwa8(VS.80).aspx
これが使えるのであれば,定義する必要はないでしょう。

あとは,MSの某氏のblog 「とあるコンサルタントのつぶやき」 で,
ちょうどWindows Formsにおけるマルチスレッドについてとりあげています。
内容は難しいですが,役に立つかと思います。
http://blogs.msdn.com/nakama/default.aspx

[ツリー表示へ]
タイトル解決
記事No8853
投稿日: 2009/04/07(Tue) 20:02
投稿者コンタクト
YuOさん回答ありがとうございます。

スレッド内でイベントを起こし
Formでイベント処理を実行するように
Progrmを作り変え、挑戦中です。

お二人とも有難うございました。

[ツリー表示へ]