Websocket-sharp 在打开 websocket 时不会引发 OnOpen 事件
Websocket-sharp not raising OnOpen event upon opening websocket
我正处于编写与 IP 摄像机接口的程序的早期阶段。我昨天写的一些代码可以工作,但是当我今天早上回来时却没有。我知道,我可能做了一些事情,但据我所知,当我在离开前单击调试时它起作用了,而当我进来时单击调试时它没有起作用。我什至让我的计算机与 VS 运行 过夜(我几乎从不这样做,从那以后我就重新开始了)所以我可以在离开它们时使用它和我所有的互联网标签。电脑是锁着的,所以除非有什么非常足智多谋的人决定来惹我,一夜之间什么都没有改变。
我正在使用 websocket-sharp,当我连接到 websocket 时(这似乎成功发生),没有引发 OnOpen 事件。
websocket-sharp 引发事件的位在以下几行中。
private void open ()
{
_inMessage = true;
startReceiving ();
try {
OnOpen.Emit (this, EventArgs.Empty);
}
catch (Exception ex) {
_logger.Error (ex.ToString ());
error ("An error has occurred during the OnOpen event.", ex);
}
它到达了 OnOpen.Emit,并且没有抛出异常,所以它似乎认为它正在引发事件。活动如下
public event EventHandler OnOpen;
它似乎没有到达这一行,因为当我在那里放置一个断点时它并没有暂停。我以前从未使用过 .Emit 方式来引发事件,而且在研究中也没有发现太多,所以也许那里出了问题?
我的代码如下。
public Form1()
{
InitializeComponent();
this.Shown += MainWindow_Loaded;
}
void MainWindow_Loaded(object sender, EventArgs e)
{
using (var ws = new WebSocket("ws://169.254.101.183"))
{
ws.OnMessage += (sender2, e2) =>
textBox1.Text = e2.Data.ToString();
ws.Connect();
ws.OnOpen += (sender2,e2) =>
textBox1.Text = "connected";
/*ws.OnError += (sender2, e2) =>
textBox1.Text = e2.Message;*/
//textBox1.Text = ".";
}
}
是否有任何明显的理由表明 OnOpen.Emit 不应实际引发 OnOpen 事件?
在 MainWindow_Loaded 方法中,您是在订阅 OnOpen 事件之前调用 Connect。
如果您在调用 Connect 之前订阅了事件,那么 textBox1.Text 应该在成功连接后设置为 "connected"。
在你的情况下,真正的原因是这一行
using (var ws = new WebSocket("ws://169.254.101.183"))
当你的块结束时 'ws' 对象被释放,包括你的事件处理程序。延迟一段时间后,您会收到来自 WebSocket 的响应,但处理程序已被销毁。
我正处于编写与 IP 摄像机接口的程序的早期阶段。我昨天写的一些代码可以工作,但是当我今天早上回来时却没有。我知道,我可能做了一些事情,但据我所知,当我在离开前单击调试时它起作用了,而当我进来时单击调试时它没有起作用。我什至让我的计算机与 VS 运行 过夜(我几乎从不这样做,从那以后我就重新开始了)所以我可以在离开它们时使用它和我所有的互联网标签。电脑是锁着的,所以除非有什么非常足智多谋的人决定来惹我,一夜之间什么都没有改变。
我正在使用 websocket-sharp,当我连接到 websocket 时(这似乎成功发生),没有引发 OnOpen 事件。
websocket-sharp 引发事件的位在以下几行中。
private void open ()
{
_inMessage = true;
startReceiving ();
try {
OnOpen.Emit (this, EventArgs.Empty);
}
catch (Exception ex) {
_logger.Error (ex.ToString ());
error ("An error has occurred during the OnOpen event.", ex);
}
它到达了 OnOpen.Emit,并且没有抛出异常,所以它似乎认为它正在引发事件。活动如下
public event EventHandler OnOpen;
它似乎没有到达这一行,因为当我在那里放置一个断点时它并没有暂停。我以前从未使用过 .Emit 方式来引发事件,而且在研究中也没有发现太多,所以也许那里出了问题?
我的代码如下。
public Form1()
{
InitializeComponent();
this.Shown += MainWindow_Loaded;
}
void MainWindow_Loaded(object sender, EventArgs e)
{
using (var ws = new WebSocket("ws://169.254.101.183"))
{
ws.OnMessage += (sender2, e2) =>
textBox1.Text = e2.Data.ToString();
ws.Connect();
ws.OnOpen += (sender2,e2) =>
textBox1.Text = "connected";
/*ws.OnError += (sender2, e2) =>
textBox1.Text = e2.Message;*/
//textBox1.Text = ".";
}
}
是否有任何明显的理由表明 OnOpen.Emit 不应实际引发 OnOpen 事件?
在 MainWindow_Loaded 方法中,您是在订阅 OnOpen 事件之前调用 Connect。
如果您在调用 Connect 之前订阅了事件,那么 textBox1.Text 应该在成功连接后设置为 "connected"。
在你的情况下,真正的原因是这一行
using (var ws = new WebSocket("ws://169.254.101.183"))
当你的块结束时 'ws' 对象被释放,包括你的事件处理程序。延迟一段时间后,您会收到来自 WebSocket 的响应,但处理程序已被销毁。