2014-01-31 1 views
0

내 제목 문제의 텍스트가 맞지 않으면 사과드립니다 ... 내 문제 : 첫 번째 클래스는 문제없이 게시되었으며 다음을 통해 제어 프로세서로 데이터를 보낼 수 있습니다. Crestron.ActiveCNX. "Hello world"가 포함 된 선은 제어 프로세서에 데이터를 보내며 여기서는 정상적으로 작동합니다. 동일한 클래스에서이 ActiveCNX 통신을 시작하고 이벤트 처리 (여기에 표시되지 않음)도 있습니다. 하지만 코드가 많아서 다른 클래스의 동일한 ActiveCNX 연결을 통해 데이터를 보내야합니다. 이 클래스는 내 문제를 설명하는 데 필요한 코드와 함께 표시됩니다. 이 두 번째 클래스에서 데이터를 보내려고하면 Nullreference 예외 코드 -1 오류가 발생합니다.Nullreference 예외 코드 -1 다른 클래스의 개체를 사용할 때

내가 뭘 잘못하고 있니?

죄송합니다. 바보 같은 질문 인 경우 죄송합니다. 나는 C# 언어를 사용할 필요가있는이 모든 시간에 프로그래머입니다.

도움 주셔서 감사합니다. Erik.

using Crestron.ActiveCNX; 
namespace Server 
{ 
public partial class Form1 : Form 
{ 
    public ActiveCNX cnx; 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    public void Form1_Load(object sender, EventArgs e) 
    { 
     //Initialize ActiveCNX 
     cnx = new ActiveCNX();               
     cnx.Connect("10.0.0.32", 3); 

     MethodInvoker simpleDelegate = new MethodInvoker(AsynchronousSocketListener.StartListening); 
     simpleDelegate.BeginInvoke(null, null); 
    } //Form1_Load 

    private void button2_Click(object sender, EventArgs e) 
    { 
     cnx.SendSerial(1, 1, "Hello World!"); //This works fine from this location.(sending text to a control processor). 
    } 


} //Class : Form1 
} //Namespace 

/////////////////////////////////////////// ////////////////////////////////////////////////////////////////////

namespace Server 
{ 
class SendCNXUpdate 
{ 
    public void Update() 
    { 
     Form1 form1 = new Form1(); 
     //Here it usually is code to receive data from another server, parsing it and then this class is supposed to send the parsed data to the processor. 
     form1.cnx.SendSerial(1, 1, "Hello World!"); //I am using the exact same code as in the form1 class, but get the nullexception error.. 
    } 
} 
} 

답변

1

FormLoad 메서드에서 cnx를 초기화하지만 생성자에서이를 수행해야합니다.

public Form1() 
    { 
     InitializeComponent(); 
     cnx = new ActiveCNX();               
     cnx.Connect("10.0.0.32", 3); 

    } 
1

양식을 표시하지 않는 방법 Update()에서, 그래서 Form_Load() 방법은 호출되지 않습니다. Form_Load()cnx 만 초기화하십시오. 당신은뿐만 아니라 Update()에를 초기화해야합니다

public void Update() 
{ 
    Form1 form1 = new Form1(); 
    form1.cnx = new ActiveCNX();               
    form1.cnx.Connect("10.0.0.32", 3); 
    form1.cnx.SendSerial(1, 1, "Hello World!"); 
} 

더 나은 아직, 당신은 Form1에서 그것을 분리하기 위해 별도의 클래스로 CNX 주변의 모든 논리를 추출 할 수 있습니다.

관련 문제