Nullreference在另一个类中使用对象时的异常代码-1

时间:2014-01-31 00:13:44

标签: c#

如果我的标题问题文字不正确,我道歉... 我的问题: 发布的第一堂课工作正常,我可以通过Crestron.ActiveCNX将数据发送到控制处理器。显示包含“Hello world”的行将数据发送到控制处理器,这里工作正常。在同一个类中,我启动了这个ActiveCNX通信,还有事件处理(此处未显示)。 但是我有很多代码,需要从另一个类通过这个相同的ActiveCNX连接发送数据。这个类显示了解释我的问题所需的代码。当我尝试从第二个类发送数据时,我得到Nullreference异常代码-1错误。

我做错了什么?

对不起,如果这是一个愚蠢的问题。我是一个全能的程序员,这次我需要使用C#语言。

感谢您的帮助! 埃里克。

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..
    }
} 
}

2 个答案:

答案 0 :(得分:1)

您在FormLoad方法中初始化cnx,但您需要在构造函数中执行此操作。

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

    }

答案 1 :(得分:1)

Update()方法中,您不显示表单,因此不会调用Form_Load()方法。您只需在cnx中初始化Form_Load()。您应该在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!");
}

更好的是,您可以将CNX周围的所有逻辑提取到一个单独的类中,以将其与Form1分离。