这是一个WinForms C#应用程序。以下两个代码片段显示了初始化对象的两种不同方式。他们给出了不同的结果。
它的工作方式与预期一致:
public partial class Form1 : Form
{
private CameraWrapper cam;
public Form1()
{
cam = new CameraWrapper();
InitializeComponent();
}这不起作用(详细信息如下):
public partial class Form1 : Form
{
private CameraWrapper cam = new CameraWrapper();
public Form1()
{
InitializeComponent();
}在CameraWrapper内部,我使用第三方软件开发工具包与摄像头进行通信。我在SDK上注册了一个事件,当结果可用时会调用该事件。
在第一种情况下(在构造函数内部初始化),一切都按预期工作,并且调用CameraWrapper内部的事件处理程序。在情况2中,事件处理程序永远不会被调用。
我认为这两种类型的对象初始化是相同的,但事实似乎并非如此。为什么?
下面是整个CameraWrapper类。事件处理程序应该在调用Trigger之后调用。
class CameraWrapper
{
private Cognex.DataMan.SDK.DataManSystem ds;
public CameraWrapper()
{
ds = new DataManSystem();
DataManConnectionParams connectionParams = new DataManConnectionParams("10.10.191.187");
ds.Connect(connectionParams);
ds.DmccResponseArrived += new DataManSystem.DmccResponseArrivedEventHandler(ds_DmccResponseArrived);
}
public void Trigger()
{
SendCommand("TRIGGER ON");
}
void ds_DmccResponseArrived(object sender, DmccResponseArrivedEventArgs e)
{
System.Console.Write("Num barcodes: ");
System.Console.WriteLine(e.Data.Length.ToString());
}
void SendCommand(string command)
{
const string cmdHeader = "||>";
ds.SendDmcc(cmdHeader + command);
}
}发布于 2012-10-24 01:39:04
我认为这两种类型的对象初始化是相同的,但事实似乎并非如此。
不完全是。
在第一种情况下,在Form的基类构造函数之后调用CameraWrapper构造函数。在第二种情况下,依次调用CameraWrapper构造函数、基类构造函数和Form1构造函数。
Form构造函数中的某些内容可能会影响CameraWrapper构造函数的执行。
https://stackoverflow.com/questions/13036107
复制相似问题