这是一个WinForms C#应用程序.以下两个snippits显示了两种不同的初始化对象的方法.他们给出了不同的结果.
这按预期工作:
public partial class Form1 : Form
{
private CameraWrapper cam;
public Form1()
{
cam = new CameraWrapper();
InitializeComponent();
}
Run Code Online (Sandbox Code Playgroud)
这不起作用(详情如下):
public partial class Form1 : Form
{
private CameraWrapper cam = new CameraWrapper();
public Form1()
{
InitializeComponent();
}
Run Code Online (Sandbox Code Playgroud)
里面CameraWrapper我使用的是第三方SDK与相机通信.我在SDK上注册了一个事件,当结果可用时调用该事件.
在案例1(构造函数内部初始化)中,一切都按预期工作,并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);
}
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 11
我认为这两种对象初始化样式是相同的,但似乎并非如此.
不完全的.
在第一种情况下,CameraWrapper构造函数在基类构造函数之后调用Form.在第二种情况下,CameraWrapper调用构造函数,然后是基类构造函数,然后是Form1构造函数体.
Form构造函数中的某些内容可能会影响构造函数的执行CameraWrapper.