接口问题?对象引用未设置为对象的实例

时间:2016-05-30 01:10:34

标签: c# winforms interface

编辑:stackoverflow的新功能。这意味着我没有足够的经验值或在现有问题中寻求帮助。我已阅读有关此错误代码的其他问题,但它们似乎不适用于我的情况。如果您认为这是一个完全重复的问题,那么请留下评论,说明这是一个重复的问题。更好的是,重复问题的答案可以帮助我。我很乐意看到它。 C#的新手,也是OOP的新手。这意味着我可能不理解在类似问题中提供的解释,但是,由于我是stackoverflow的新手,我没有足够的要点在这些问题中要求进一步解释。我应该如何在这样一个独特的环境中学习?或者这个论坛仅供专家使用?

我是C#,OOP和stackoverflow的新手。我在.NET 2.0中使用Windows Forms解决方案(使用API​​来控制在.NET 2.0中制作的蓝牙适配器。

在Program.cs中,我尝试在Program.cs中编写的类与表单类Form1之间建立接口。当我尝试通过调试启动程序时,它会因错误An unhandled exception of type 'System.NullReferenceException' occurred in EP1 Additional information: Object reference not set to an instance of an object.

而停止

我基于“更好的解决方案”shown here制作了界面,除了在我的情况下我试图将在CCINS_Comm类中生成的字符串添加到Form1类的列表框中

所以,在Program.cs中我有:

namespace EP1
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }

    class CCINS_Comm : IDisposable
    {
        // Other stuff like constants
        //                  members
        //                  properties
        //                  constructor

// Do I have this in the right place in my class?

        private readonly IForm1Interface Form1;
        public CCINS_Comm(IForm1Interface Form1)
        {
            this.Form1 = Form1;
        }


        /// <summary>
        /// Start scan
        /// </summary>
        public CyApiErr StartScan()
        {
            return StartScanHelper();
        }

     /// <summary>
    /// Setup the scan result handler to log the discovered BLE devices
    /// </summary>
    private void SetupScanResultHandler()
        {
            m_scanCb.ScanResultHandler = (result) =>
            {
                if (result != null)
                {
                    StringBuilder SB = new StringBuilder();
                    foreach (var item in result.ScanRecords)
                    { 
                        SB.Length = 0;
                        SB.AppendFormat("Peer device: [{0:X12}, {1}], ADV_TYPE: {2}, RSSI: {3}",
                            item.PeerDeviceAddress.Address,
                            item.PeerDeviceAddress.AddressType,
                            item.AdvertisementType,
                            item.RSSI);
                        if(SB.ToString() != "")
                        {
                            string str = SB.ToString();    // Troubleshooting
                            Form1.AddToScanResultsList(str); // Error happens here
                        }

                    }
                }
            };
        }
   }
}

然后,在Form1.cs中,我有:

namespace EP1
{

    // This is the interface.  Is it in the right place?
    interface IForm1Interface
    {
        void AddToScanResultsList(string resultString);
    }



    public partial class Form1 : Form, IForm1Interface
    {
        CCINS_Comm ccinsComm = new CCINS_Comm();  // Generates a new instance of CCINS_Comm for me to work with


        public Form1()
        {
            InitializeComponent();
            InitalizeStimControls();
        }


       // various methods handling manipulation of controls, etc.


        // method that the interface refers to 
        public void AddToScanResultsList(string resultString)
        {
            listBoxScanResults.Items.Add(resultString);
        }

    }
}

1 个答案:

答案 0 :(得分:0)

public CCINS_Comm(IForm1Interface Form1)
{
   this.Form1 = Form1;
}

你只有1个CCINS_Comm类的构造函数。因此,当您将IForm1Interface实例化为对象时,该类必须具有IForm1Interface作为参数。 Check this out