2009-11-17 19 views

cevap

42

Seri bağlantı noktası veri alındığında sinyal almak için olayları kullandım.

İşte arabirimim.

public interface ISerialPortWatcher 
{ 
    event EventHandler<ReceivedDataEventArgs> ReceivedData; 
    event EventHandler StartedListening; 
    event EventHandler StoppedListening; 

    SerialPortSettings PortOptions { set; } 

    bool Listening { get; set; } 
    void Stop(); 
    void Start(); 
} 

public class ReceivedDataEventArgs : EventArgs 
{ 
    public ReceivedDataEventArgs(string data) 
    { 
     Data = data; 
    } 
    public string Data { get; private set; } 
} 
4

Arabirimlerdeki olaylar, tıpkı yöntemler gibi çalışır. Onları herhangi bir arabirimi nasıl kullanacağınızı kullanabilirsiniz.

public interface IInterface { 
    event EventHandler QuestionAsked; 
} 

public class Class : IInterface { 
    event EventHandler QuestionAsked; 

    //As with typical events you might want an protected OnQuestionAsked 
} 
13

burada benim uygulamalarda 1'inde bu gibi bazı kod var bir örnek

public interface IMainAppWindow 
{ 
    event EventHandler Closed; 
} 

// version 1 main window 
public MainForm : Form , IMainAppWindow 
{ 

} 

// version 2 main window 
public MainWindow : Window , IMainAppWindow 
{ 
    event EventHandler Closed; 

    public void OnClosed(object sender,RoutedEventArgs e) 
    { 
    if(Closed != null) 
    { 
     Closed(this,e); 
    } 
    } 
} 

olduğunu. Uygulama winform'larda yazıldı, ardından WPF'ye yükseltildi.

+0

Bir olay oluştururken, [etkinliğin bir kopyasını yapmalısınız] (https://msdn.microsoft.com/en-us/library/w369ty8x%28v=vs.100%29.aspx) (bkz. " OnRaiseCustomEvent() ') ** bir yarış durumu olasılığını önlemek için **: EventHandler handler = this.Closed; if (handler! = null) {...} ' – DavidRR

16

.NET çerçevesinde mükemmel bir örnek, INotifyPropertyChanged arabirimidir. Bu arayüz sadece bir üyeden oluşur: PropertyChanged olayı.

WPF'de, bir denetimin bir nesne örneğinin belirli bir özelliğini göstereceğini belirtebilirsiniz. Ancak temel özellik değiştiğinde bu kontrol nasıl güncellenir? ilişkili nesne arabirimini INotifyPropertyChanged uyguluyorsa

, WPF çerçeve PropertyChanged için sadece dinlemek ve uygun güncelleyebilirsiniz. Çerçeve aracılığıyla,

2

klasik senaryo bakmak pasif görüntüsü MVP kalıptır. Form, NameChanged olayına sahip bir görünüm inteface'i uygular. Görünümü oluşturan/kullanan sunum yapan kişi bu etkinliğe abone olur. Metin kutusundaki ad metni değiştirildiğinde görünüm bu olayı tetikler. Sunum daha sonra bildirilir. Sunum yapan kişi yalnızca olaydan olay hakkında bilgi aldığından test için sahte bir görünüm sağlayabilirsiniz. Görünüm sunucudan tamamen ayrılmıştır.

+0

[Model View Presenter Styles] makalesinde (https://lostechies.com/derekgreer/2008/11/23/model-view-presenter-styles/) üç farklı MVP modelini açıklar, üçüncü örnek olarak adlandırılan ** Preserving Presenter Style ** burada açıklanan ** Pasif Görünüm ** modeli ile en yakın şekilde hizalanmış gibi görünür. – DavidRR