VB2010で、別スレッドの変数をメインフォームが閉じられた時に
表示するプログラムを書いたのですが、変数の中身が空になってしまいます。
色々試してみたのですが、うまく値を参照できません。
別スレッド上の値をどうやったら参照できるのでしょうか?
以下のような感じで記述したのですが、何か特別な書き方があるのでしょうか?
わかりにくい質問ですが、ご回答おねがいします。m(_ _)m
簡単なイメージを書きました。
http://www.progoo.com/rental/img_bbs1/img_data/1 …
'メインフォーム
Public Class Form1
'★変数testをpublicで宣言
Public test As String=""
'★ロードしたらBackgroundWorker1を動かす
Private Sub Form1_Load() Handles MyBase.Load
BackgroundWorker1.RunWorkerAsync()
End Sub
'★BackgroundWorker1はModule1.test()を動かしてtestに"成功"の文字列を入れる
Private Sub BackgroundWorker1_DoWork() Handles BackgroundWorker1.DoWork
Module1.test()
End Sub
'★フォームを閉じた時に変数testを表示する
Private Sub Form1_closing() Handles MyBase.FormClosing
MsgBox(test)
End Sub
End Class
'別モジュール
Module Module1
Public Sub test()
Form1.test = "成功"
End Sub
End Module
No.1ベストアンサー
- 回答日時:
ThreadStatic属性を使わない限り,フィールドはスレッドに関係なく存在します。
Form1_LoadでRunWorkerAsyncの代わりにModule1.testを呼び出しても,やはりフォームを閉じるときに「成功」とは表示されないはずです。
問題点は,Module1.testの方にあります。
Form1というのはクラスであって,インスタンスではありません。
そのため,本来ならば
Form1.test = "成功"
というコードはエラーになります。
# VB.Net 7.0/7.1では事実そのようになる。
しかし,フォームに関してはForm1で「暗黙のインスタンス」を使えるという特例があります。
このため,
Form1.test = "成功"
はForm1クラスの暗黙のインスタンスのtestフィールドに"成功"という文字列を代入するコードになります。
ところが,画面に表示されるウィンドウはForm1クラスの暗黙ではないインスタンスです。
そのため,testフィールドは別のものになります。
解決方法は,testの引数にForm1を受け取り,そのインスタンスのtestに代入するように変更することです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) 九九の答えの計算 3 2022/12/20 22:13
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) マクロについて教えてください。 1 2023/06/06 00:57
- Excel(エクセル) エクセルで同じ数字同士を自動で線で結ぶVBAを教えてください 6 2022/04/26 23:13
- Java java final 1 2022/06/10 22:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
変数名の付け方
-
複数の変数を宣言する時、同時...
-
C#において、同じインスタンス...
-
インスタンス参照でアクセスで...
-
フォームの存在をチェックする方法
-
文字列を日付に変換でParseExce...
-
VB.NET getとsetの概念がわかり...
-
private static という変数の修飾
-
C# インスタンスの破棄
-
PHPExcel使用で2枚目のシートを...
-
データベースから日付型を取得...
-
VB6.0で、DLLを動的に参照したい
-
マルチスレッド間でデータ交換...
-
「インスタンス」の意味をわか...
-
SQLを連続発行する時の正しい(?...
-
C#「オブジェクト参照が必要で...
-
String a = "a"; と String b =...
-
javaのクラスの作り方、エラー...
-
生成したインスタンスを削除す...
-
VB6.0のクラスで、自分自身のイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数名の付け方
-
インスタンス参照でアクセスで...
-
複数の変数を宣言する時、同時...
-
private static という変数の修飾
-
VB.NET getとsetの概念がわかり...
-
C#において、同じインスタンス...
-
生成したインスタンスを削除す...
-
C# インスタンスの破棄
-
newしないインスタンス?実体化...
-
SQLを連続発行する時の正しい(?...
-
「インスタンス」の意味をわか...
-
文字列を日付に変換でParseExce...
-
変数の参照でエラーが出てしま...
-
フォームの存在をチェックする方法
-
javaのクラスの作り方、エラー...
-
オブジェクト参照がオブジェク...
-
String a = "a"; と String b =...
-
C#「オブジェクト参照が必要で...
-
エクセル(複数インスタンス)...
-
他のファイルの変数参照
おすすめ情報