2011-12-01 1 views
0

Toute façon de simplifier ce code de travail, c'est-à-dire le délégué {}?Événements WinForm dans une autre classe .NET2 Simplify delegate

public partial class Form1 : Form 
{ 
    private CodeDevice codeDevice; 

    public Form1() 
    { 
     InitializeComponent(); 
     codeDevice = new CodeDevice(); 

     //subscribe to CodeDevice.ConnectionSuccessEvent and call Form1.SetupDeviceForConnectionSuccessSate when it fires 
     codeDevice.ConnectionSuccessEvent += new EventHandler(SetupDeviceForConnectionSuccessState); 
    } 

    private void SetupDeviceForConnectionSuccessState(object sender, EventArgs args) 
    { 
     MessageBox.Show("It worked"); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     codeDevice.test(); 
    } 
} 

public class CodeDevice 
{ 
    public event EventHandler ConnectionSuccessEvent = delegate { }; 

    public void ConnectionSuccess() 
    { 
     ConnectionSuccessEvent(this, new EventArgs()); 
    } 

    public void test() 
    { 
     System.Threading.Thread.Sleep(1000); 
     ConnectionSuccess(); 
    } 
} 

WinForm event subscription to another class

How to subscribe to other class' events in c#?

Répondre

0

Si vous ne pensez pas que vous pouvez simplyfy:

public event EventHandler ConnectionSuccessEvent = delegate { } 

même en C# 3 + vous ne pouvez faire

public event EventHandler ConnectionSuccessEvent =() => { } 

Cependant, vous pouvez simplifier

codeDevice.ConnectionSuccessEvent += new EventHandler(SetupDeviceForConnectionSuccessState); 

à

codeDevice.ConnectionSuccessEvent += SetupDeviceForConnectionSuccessState; 
+0

Merci @Ben - que je ne suis pas en utilisant l'objet, pas les args juste essayé un autre qui est ConnectionSuccess (null, null). Cependant vif comme ci-dessus pour l'instant. –

+1

Le problème avec ConnectionSuccess (null, null) est que vous avez ajouté l'hypothèse que l'expéditeur ou le eventargs ne sera jamais référencé. Un autre développeur a peut-être écrit une méthode souscrite à cet événement et a utilisé ces paramètres, ce qui a provoqué une exception de référence nulle. 'ConnectionSuccessEvent (this, new EventArgs());' ou 'ConnectionSuccessEvent (this, EventArgs.Empty);' sont meilleurs. –

Questions connexes