dll を生成する WinForms コントロール プロジェクトが 1 つあります。最初のプロジェクトを使用する 2 番目の dll プロジェクト (winforms コントロールも) があります。2 番目のプロジェクトを使用する 3 番目の winforms プロジェクト (今回はフォーム) があります。ということで【第三企画】<>------>【第二企画】<>-------->【第一企画】
最初のプロジェクトは、静的イベントを公開します。3 番目のプロジェクトからそのイベントをサブスクライブしようとしています。+= 呼び出しの後、イベントは null (サブスクリプションではない) のままです。
購読していないのはなぜですか?Winforms コントロールに独自のスレッドがあるためですか? FirstProject ユーザー コントロールは、ある時点でオンザフライで作成されます。しかし、他に何もせずに、静的が正しく機能することを期待します。
プロジェクト1
namespace Something
{
public partial class FirstClass : UserControl
{
...
public delegate void EventHandler();
public static event EventHandler MyEvent;
...
}
}
プロジェクト 3
namespace Another
{
public partial class ThirdClass : Form
{
...
public ThirdClass()
{
....
Something.FirstClass.MyEvent += new Something.FirstClass.EventHandler(MyHandler);
}
public void MyHandler()
{
}
...
}
}
編集 3 つのプロジェクトと静的イベントを取得するための基本を備えた小さなアプリケーションを作成しました。そして、それは機能します。したがって、何か他のことが起こっています。
編集 2 最初のプロジェクト (イベントのあるプロジェクト) を含む dll が 2 回読み込まれていました。エイリアスを追加しましたが、役に立ちませんでした。+= の直後にイベントがまだ null であることはまだ説明されていません。
EDIT 3イベントを変換したので、追加/削除アクセサーのペアがあります。それは追加に入ります。Handler メソッドは値を正しく取得します (したがって null はありません) が、外部に出ると再び null になります。