トップ回答者
共有DLLの作り方

質問
-
プロジェクト数:3件
言語:C#(すべて)
実行:exe 2つ、dll1つ
プロセス数:1
C#で、2つのプロジェクト(AとB)で作成したexeに対して、タイマーでセットした時間起きにデータを更新・処理通知するDLL(C)を作りたいと思っています。
Aにて、Bで作成したexeとCで作成したDLLを参照の追加で参照し、Aの処理内で追加したexeのオブジェクトを生成し、.show()にて呼びだそうと考えています。
一定の時間起きにCのDLLにてタイマー処理を行ない、Aに対してはこのデータを渡す。Bに対してはこのデータを渡すといった処理を行ないたいと考えています。
この場合、AとBは同じデータを見たいのですがどういう風に作成すれば実現出来るでしょうか?
AにてCのDLLも起動しているため、作成したオブジェクトをBのコンストラクタまたはセット用のメソッドを用意して、Bに渡してしまってもいいのかな?と思っているのですが、設計思想的にはあまりよろしくないでしょうか?
以下に構想ソースを記載します。
-----A.Project-----
class a{
private BPJ.BPJ obj1;
private CPJ.CPJ obj2;
void コンストラクタ()
{
obj1 = new BPJ.BPJ();
obj2 = new CPJ.CPJ();
obj1setPublicProc(ob2);
}
}
------B.Project----
class BPJ
{
private CPJ.CPJ obj;
void setPublicProc(CPJ.CPJ c)
{
this.obj = c;
}
}
-------------------------------
よろしくお願いします。
回答
-
理屈的に、同一プロセス内では単一のものとして扱うのが妥当な処理なのであれば、Cにて処理するオブジェクトをシングルトンで作成するようにして、データの通知はイベントにする辺りが簡単なところでしょう。
AとBはぞれぞれ、Cのシングルトンのオブジェクトに対してイベントハンドラを登録するだけです。
Cはシングルトンのインスタンスが作成されたらタイマーで処理を開始すればよいでしょう。
ただし、最初の処理と通知を見逃してはならないなど厳密なタイミングの管理が必要なら、イベントハンドラ登録のタイミングと合わせて、条件など含め少し工夫が必要かもしれません。
- 回答としてマーク mogja 2014年7月30日 14:59
すべての返信
-
理屈的に、同一プロセス内では単一のものとして扱うのが妥当な処理なのであれば、Cにて処理するオブジェクトをシングルトンで作成するようにして、データの通知はイベントにする辺りが簡単なところでしょう。
AとBはぞれぞれ、Cのシングルトンのオブジェクトに対してイベントハンドラを登録するだけです。
Cはシングルトンのインスタンスが作成されたらタイマーで処理を開始すればよいでしょう。
ただし、最初の処理と通知を見逃してはならないなど厳密なタイミングの管理が必要なら、イベントハンドラ登録のタイミングと合わせて、条件など含め少し工夫が必要かもしれません。
- 回答としてマーク mogja 2014年7月30日 14:59