美好的一天
我正在努力熟悉事件,我似乎无法理解这个概念,经过相当多的教程和视频后,我仍然迷失方向,因此我将具体说明我的问题。
简而言之,如果ping报告成功,则线程会ping IP,
ServerOnline =(ping ==成功)? true:false;
事件监听器应该"听"对于变量变化,获取变量并相应地处理。
基于以下代码的示例将是一个巨大的帮助。
class tcp_connector
{
bool ServerOnline
void thread_checkServer()
{
//do code
ServerOnline = true;
//notify of variable change
}
}
class tcp_sender
{
//when ServerOnline bool = true
//button.color = color.green;
}
答案 0 :(得分:3)
如果event
发生如下变化,您可以在tcp_connector
中声明ServerOnline
:
class tcp_connector
{
// standard event pattern
public event EnventHandler ServerOnlineChanged;
protected virtual void OnServerOnlineChanged
{
EventHandler handler = ServerOnlineChanged; // for thread safety
if (handler != null)
handler(this, EventArgs.Empty);
}
private bool _serverOnline;
public bool ServerOnline // implement as property
{
get { return _serverOnline; }
set {
if (_serverOnline == value) return;
_serverOnline = value;
OnServerOnlineChanged(); // raise event
}
}
void thread_checkServer()
{
//do code
// be sure to use the property ServerOnline, not the
// field _serverOnline!
// the property setter will raise ServerOnlineChangedEvent
ServerOnline = true;
}
}
然后你就可以在event
中使用tcp_sender
这样的内容:
class tcp_sender
{
private tcp_connector _connector;
public tcp_sender()
{
_connector = new tcp_connector();
// subscribe to event
_connector.ServerOnlineChanged += tcp_connector_ServerOnlineChanged;
}
// the event handler for the ServerOnlineChanged event
private void tcp_connector_ServerOnlineChanged(object sender, EventArgs e)
{
if (_connector.ServerOnline)
button.color = color.green;
}
}
这不是一个真正的“倾听者”,可以监视您的财产ServerOnline
,但通过将其分为字段和属性,您可以识别更改并且举起指定的事件。