dll을 생성하는 WinForms 컨트롤 프로젝트가 하나 있습니다. 첫 번째 프로젝트를 사용하는 두 번째 dll 프로젝트 (또한 winforms 컨트롤)가 있습니다. 두 번째 프로젝트를 사용하는 세 번째 winforms 프로젝트 (이번에는 양식)가 있습니다. 그래서 [제 3 프로젝트] <> ------> [두 번째 프로젝트] <> [첫 번째 프로젝트]정적 이벤트가 다른 dll에서 구독되지 않습니다.
첫 번째 프로젝트는 정적 이벤트를 노출합니다. 세 번째 프로젝트에서 해당 이벤트에 가입하려고합니다. 이벤트는 + = 호출 후에 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()
{
}
...
}
}
나는 기본 사항에 작은 응용 프로그램을 만들었습니다 편집 세 가지 프로젝트와 정적 이벤트를 가져옵니다. 그리고 그것은 작동합니다. 그러므로 뭔가 다른 일이 일어나고 있습니다.
EDIT 2 이벤트가있는 첫 번째 프로젝트가 들어있는 dll이 두 번로드되고있었습니다. 별칭을 추가했지만 도움이되지 않았습니다. 그리고 여전히 + = 이벤트가 여전히 null 일 때를 설명하지 않습니다.
EDIT 3 추가/제거 접근 자 쌍을 갖도록 이벤트를 변환했습니다. 그것은 추가에 들어갑니다. Handler 메서드는 값을 올바르게 가져오고 (따라서 null도 없음) 일단 외부로 나가면 다시 null입니다.
프로젝트 3의 ctor가 실행 중입니까? 등록 코드에 중단 점을 넣고 전혀 실행되었는지 확인하십시오. 당신이 왜 그것이 효과가 없어야하는지에 대한 정보에서 아무 이유도 찾아 볼 수 없습니다. –
작동하지 않습니다. 거기에 중단 점을 넣었습니다. 그것이 내가 +가 작동하지 않는다는 것을 발견 한 것입니다. –