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;   
}

C# - 检查并通知布尔值已更改

您可以在

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,但是通过将其分隔为字段属性,您可以识别更改并引发指定的事件。