2010-07-27 2 views
1

Windows Phone Silverlight 앱을위한 간단한 메시징 시스템을 만들고 있습니다.Silverlight WP7 메시징, WeakReference를 사용해야합니까? 그렇다면 어떻게해야합니까?

다른 개체가 수신/수신하려는 메시지 유형과 처리자로 처리 <> 대리인을 전달하는 메시징 개체에 가입하는 다양한 xaml 페이지 &입니다.

메시지가 페이로드되면 올바른 가입자에게 전송됩니다.

다음은 메시지 클래스로 원하는 초안입니다.

public class MessageBus 
{ 
    private List<Subscriber> subscribers; 

    public MessageBus() 
    { 
     subscribers = new List<Subscriber>(); 
    } 

    public void Subscribe(string messageType, Action<object>subscriber){ 
     subscribers.Add(new Subscriber(messageType, subscriber)); 
    } 

    public void SendMessage(object message, string messageType) 
    { 
     foreach (Subscriber subscriber in subscribers) 
     { 
      if (subscriber.MessageType == messageType && subscriber.Reciever != null) 
      { 
       subscriber.Reciever(message); 
      } 
     } 
    } 

} 

public class Subscriber 
{ 
    public string MessageType { get; set; } 
    public Action<object> Reciever { get; set; } 

    public Subscriber(string messageType, Action<Object> reciever) 
    { 
     MessageType = messageType; 
     Reciever = reciever; 
    } 

} 

그래서 varius 가입자는 유형 Action으로 추가됩니다. 내가 알기로 이것은 원래 페이지/객체가 가비지 수집되는 것을 멈추게 할 것이다. (그렇지 않다면?) 그 참조가 항상 존재하기 때문에.

실제로 구독을 취소 할 수 없거나 항상 머물지는 못하고 메시징 큐가 응용 프로그램의 수명 동안 유지됩니다.

WeakReferences를 구현해야합니까? 그렇다면 어떻게해야합니까?

WeakReferences가 오버 헤드를 추가합니까?

사용중인 메모리가 작기 때문에이 점을 고려해 보는 것이 미친가요?

+0

는 소리 다시 OnNavigatedFrom. 훨씬 간단 해! – Technium

답변

관련 문제