トップ回答者
別プロジェクトのクラス(オブジェクト)間で情報を共有する方法について

質問
-
複数のことなるプロジェクトからなるソリューションを構成していて、
その中のメインのプロジェクトがその他のプロジェクトで作成される
コントロールやクラスのオブジェクトを使っている状態です。そのメインプロジェクトと各オブジェクトとの間で、なんらかの情報の共有
を行いたい場合、たとえば、
あるプロジェクトを追加してそこに共有メンバーのフィールドとして
Public Shared XXX As Boolean
を書き、このクラスを参照できるようにしたいくつかのプロジェクトの中で
この共有メンバーを参照、更新することでこの情報をやり取りすること
ができると考えてよいでしょうか。実際に試してみましたがこの方法ではTrue/Falseの値の共有は実現
できませんでした。
Moduleを使うのはVB6以前の方法となるため使用はできるだけしたく
ないのですが、本件ご指導いただけましたらありがたく。
回答
-
外池と申します。
ソリューションの構成(複数の異なるプロジェクト)、という切り口で質問を始めておられるので、かえって混乱しているように思いますが・・・、プロジェクトが異なっていようが、同一プロジェクトであろうが・・・、最終的に一つのexeと複数のdllにビルドされるソリューションなんですよね?(この時点で私の理解が間違っていたら、再度、状況を詳しくご説明頂きたいのですが)
だとすれば、単純に「Moduleを用いずに、オブジェクト間で情報を共有する方法はありませんか?」という問いになろうかと思います。
で、私なら、情報共有用のクラスを一つ作って、そこにSharedな変数を用意しますが・・・。で、このクラスが参照できるように、ソリューション内のそれぞれのプロジェクトの参照設定をしてやるわけです。
すべての返信
-
外池と申します。
ソリューションの構成(複数の異なるプロジェクト)、という切り口で質問を始めておられるので、かえって混乱しているように思いますが・・・、プロジェクトが異なっていようが、同一プロジェクトであろうが・・・、最終的に一つのexeと複数のdllにビルドされるソリューションなんですよね?(この時点で私の理解が間違っていたら、再度、状況を詳しくご説明頂きたいのですが)
だとすれば、単純に「Moduleを用いずに、オブジェクト間で情報を共有する方法はありませんか?」という問いになろうかと思います。
で、私なら、情報共有用のクラスを一つ作って、そこにSharedな変数を用意しますが・・・。で、このクラスが参照できるように、ソリューション内のそれぞれのプロジェクトの参照設定をしてやるわけです。
-
外池様
ご指導ありがとうございます。
おっしゃっている状況、その通りです。
>情報共有用のクラスを一つ作って、そこにSharedな変数を用意しますが・・・。
>で、このクラスが参照できるように、ソリューション内のそれぞれのプロジェクトの参照設定をしてやるわけです。
それで、この方法をやってみた結果がこれでした。
>あるプロジェクトを追加してそこに共有メンバーのフィールドとして
> Public Shared XXX As Boolean
>を書き、このクラスを参照できるようにしたいくつかのプロジェクトの中で
>この共有メンバーを参照、更新することでこの情報をやり取りするこれをやったわけですが、どうも、別のプロジェクトの中でこの XXX の値を
Trueにしても、また別のプロジェクトで見てみると、Falseのままだったのでした。
これはもしかすると何か手続きに不足の内容が考えられるでしょうか?
-
皆様
すみませんでした。申し訳ありません。よくみましたら確かに共有できておりました。
コードを出す段階でもう一度見てみましたらわかりました!
FormCloseイベントにおいて、
'DirectoryやFileの操作中は終了できないようにする
If SharedData.SharedInfo.NowDirFilesCopying Then
e.Cancel = True ’<<<---(*1)
Return
End Ifこうしておいて(*1)が抜けていて、すり抜けていたのですが、これを試すために
If 文のところにブレークポイントを立ててそこで値を確認しようとしたところ、そこで
必ずフリーズして止まり、操作が不能になってしまいタスクマネージャーで終了
するほかなくなるのでした。何回やってもそうであったため、このNowDirFilesCopying
を立てるところでも確認したときも同じ目に遭い、どうもうまくデバッグ状態に入れず
これはもう共有値が入ってこないのではないかと思い込んでしまいました。
申し訳ありません。
ところで、プロセスが異なる場合でも AppDomain というもので共有が可能になる
のですか、これもまた勉強してみます。
ありがとうございました!!