掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
非同期別スレッドからForm.Controlを操作する方法 (ID:148156)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
まさお と申します。 宜しくお願い致します。 WinXP Pro SP3,VB2010 Express SP1 です。 vb.netに関わる或るWebページ http://codezine.jp/article/detail/139 を参考に下記を作成しました。 基本的には動いているのですが、非同期別スレッドからフォームコントロールを操作する方法が判りません。 ※β部(だけではないかもしれませんが)をどのようにすれば良いか教えて戴きたくお願い致します。 Public Class Form1 Private Delegate Sub dlgSleep(ByVal flgOperateControl As Boolean) Private dlg As New dlgSleep(AddressOf Sleeping) Private flgExecuting As Boolean = False '別スレッド Private Sub Sleeping(ByVal flgOperateControl As Boolean) flgExecuting = True System.Threading.Thread.Sleep(5000) '5秒Sleep If flgOperateControl Then Me.Button1.Enabled = True Me.Button3.Enabled = True '※α Button3_Clickで System.InvalidOperationException 発生 End If flgExecuting = False End Sub Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click '同期スレッド Button4_Clickしても直ぐにはMsgBoxは表示されない。Form.Controlの操作は可能 Button1.Enabled = False Call Me.BeginInvoke(dlg, New Object() {True}) End Sub Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click '非同期スレッド Button4_Clickで直ちにMsgBoxが表示される。 Call dlg.BeginInvoke(False, Nothing, Nothing) End Sub Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click '非同期スレッド Button4_Clickで直ちにMsgBoxが表示されるがForm.Controlの操作は不可 '※αで System.InvalidOperationException が発生する Button3.Enabled = False Call dlg.BeginInvoke(True, Nothing, Nothing) '※β End Sub Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click Dim sMsg As String = If(flgExecuting, "実行中", "待機中") MsgBox(sMsg) End Sub End Class 以上、宜しくお願い致します。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.