C# - 检查并通知布尔值已更改
本文关键字:布尔值 通知 检查 | 更新日期: 2023-09-27 18:31:21
美好的一天
我正在努力熟悉事件,我似乎无法理解这个概念,经过相当多的教程和视频,我仍然迷失了,因此我将具体说明我的问题。
简而言之,线程 ping 一个 IP,如果 ping 报告成功,
事件侦听服务器在线 = (ping == 成功) ? 真 : 假;
器应该"侦听"变量的变化,获取变量并相应地进行处理。
基于以下代码的示例将提供巨大的帮助。
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;
}
您可以在
tcp_connector
中声明一个event
,如果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;
}
}
然后,您可以在tcp_sender
中像这样使用该event
:
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
,但是通过将其分隔为字段和属性,您可以识别更改并引发指定的事件。