掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ProgressBarの使い方で? (ID:115551)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>> 2、System.Threading.Thread で実行中の Form2 に Form1での値を渡す。 >あれ。それってOKなんでしたっけ? >.NETの Windows フォームやコントロールは「スレッドセーフ」では無いので、独自作成のスレッドの中から、 >Windows.Forms のコントロールにアクセスするわけにはいかない、と理解していたのですが。 それは多分…正しいと思います。 [マルチスレッド : 同期クラスの使用法] http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vccore/html/_core_multithreading.3a_.how_to_use_the_synchronization_classes.asp [スレッド処理のデザイン ガイドライン] http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpgenref/html/cpconthreadingdesignguidelines.asp >インスタンス状態はスレッド セーフである必要がありません。既定では、クラス ライブラリはスレッド セーフではないことが必要です。 などの記述もあります。 スレッドセーフが重要なことは理解しているつもりですが、マルチスレッドは嫌って 使ってこなかったので(苦笑)不十分な点は多々あると思われます。ご指摘ありがとう ございます。表現としても誤解を生みそうな回答ですよね。…訂正しようと思いましたが 上手い表現が見つかりませんでしたのでフォローできる方がいらっしゃいましたら お願いします。 ただ、参照変数から Form クラスの関数などを利用する事は可能と思われます。 1、グローバルな参照変数(Form1 で有効なローカル変数)に Form2 のインスタンスを生成します。 2、スレッドで行うのはグローバルな Form2 の参照変数にアクセスして関数の実行などのみとします。 3、当初の質問で ShowDialog の状態を利用したいような書込みでしたので、スレッドは1つのみ起動するように [VB.NET] Dim t As New Thread(AddressOf ThreadProc) With t If .IsAlive Then .Abort() End If End With の処理を ShowDialog が解除された時点で適用しスレッドを殺してます。 4、Shared 宣言や参照変数のインスタンスが生成されているかを判断して 使用する Form2 のインスタンスは1つとします。 というような処理でそれなりに動くのは確認してます。…まぁ、処理として不安の 残る出来上がりなのでソースは公開したくないですし、 >子画面をモーダルではなく、モードレスにて表示する方向で考えてみては? ボクもそっちの方がいいとは思ってますが…。…挑戦的な意味もこめてマルチスレッドの方向で回答をしようかと。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.