编辑: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);
}
}
}
答案 0 :(得分:0)
public CCINS_Comm(IForm1Interface Form1)
{
this.Form1 = Form1;
}
你只有1个CCINS_Comm类的构造函数。因此,当您将IForm1Interface实例化为对象时,该类必须具有IForm1Interface作为参数。 Check this out