2013-04-29 21 views
0

多個實例,在事件處理程序的聲明類似下面,做他們往往重疊,並設置一個變量事件處理器和多類實例和重疊的變量C#

對於發言權的所有實例,

Something class = new Something(); 

被聲明〜3次,並且所有3次,事件處理程序被聲明和使用。

public class something 
    { 
    public string str = "1"; 
public string str2 = "2"; 
     public void onconnect(object sender, ConnectedEventArgs e) 
       { 
        if (e.Connected) 
        { 
         this.ses = e.NetworkSession; 
         this.ses.OnHandshakeHandler += new EventHandler<HSEventArgs>(OnHandshakeHandler); 
         this.ses.onreceive+= new EventHandler<PEventArgs>(onreceive); 
         return; 
        } 
      } 
    } 

現在可以說

public void onreceive(object sender, PEventArgs e) 
{ 
str = "3"; 
} 

會str的全部變爲 「3」 onrecieve?因爲在我的情況下,我開始相信事件處理程序在類的所有實例之間共享。因此,所有類的實例中的所有變量都是相同的。

如果情況並非如此,那麼事件處理程序能否成爲爲什麼我的變量都會被同一個事件引發更改的原因? 如果是這樣,你將如何隔離類並將處理程序分配給每個單獨的類?

的onConnect由

public void Connect(string ip, short port) 
    { 
     try 
     { 
      this.connector = new Connector(); 
      this.connector.OnClientConnected += new EventHandler<ConnectedEventArgs>(onConnect); 
      this.connector.Connect(ip, port); //Logs into server 
     } 
     catch 
     { 
      updateLog("[Error]Servers exploded!!!", this); 
     } 

    } 

稱爲和^當按鈕被上的GUI

+0

這取決於如何調用onconnect()。它怎麼叫? – 2013-04-29 08:07:43

+0

我剛剛編輯它。 – user2309449 2013-04-29 08:11:45

+0

'ses'沒有聲明,是'onconnect'應該訂閱一些未定義的'Connect'事件? – Jodrell 2013-04-29 08:12:22

回答

1

推稱爲如果我閱讀文檔正確(http://msdn.microsoft.com/en-us/library/bb975820.aspx)會有一個NetworkSession每個用戶。你是一個用戶,所以你有一個NetworkSession

您創建了Something的三個實例,我感覺它們都被同一事件調用:連接到遊戲網絡的軟件操作系統。

所有3 onconnect方法e得到NetworkSession相同的實例,並輸入您eventhanlder onreceive連接到NetworkSession.onreceive

因此,如果NetworkSession接收到一些內容,則會調用3個實例的所有3個事件處理程序。

每個實例使用NetworkSession.BeginCreatehttp://msdn.microsoft.com/en-us/library/microsoft.xna.framework.net.networksession.begincreate.aspx)創建單獨的NetworkSession

+0

有什麼關係,你會建議隔離這個嗎? – user2309449 2013-04-29 08:12:33

+0

我更新了我的答案。 – 2013-04-29 08:16:35