簡體   English   中英

聆聽不同班級的財產

[英]Listening for properties in different class

我試圖每次更改屬性(布爾值)時調用一個事件。 有INotifyPropertyChanged接口,但它與您自己編寫的屬性一起使用。 我有一個具有Connected屬性的tcp套接字。 目前,我正在使用while循環檢查連接狀態,但是我想知道是否可以通過事件來處理這種情況。

如果基礎類不支持它,則無法監視類屬性的更改。

您唯一的選擇是創建一個像這樣的派生類:

    public class MySocket : System.Net.Sockets.Socket, INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        private bool _connected = false;
        private Thread _pollingThread;

        public new bool Connected
        {
            get { return _connected; }
            private set { _connected = value; NotifyPropertyChanged(); }
        }

        public MySocket() : base (System.Net.Sockets.SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp)
        {
            _pollingThread = new Thread(PollingThread);
            _pollingThread.IsBackground = true;
            _pollingThread.Start();
        }

        protected void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }

        private void PollingThread()
        {
            while (true) {
                Thread.Sleep(500);
                if (base.Connected != Connected) Connected = base.Connected;
            }
        }            
    }

這只是一個未經測試的例子給你什么可以做一個總體思路。

此類將啟動一個單獨的Thread ,該Thread每500毫秒驗證其基類的Connected屬性狀態。 狀態更改后,將使用INotifyPropertyChanged接口更新子類的Connected屬性。

這是一個好主意嗎? 這實際上取決於您在做什么,線程會占用大量資源,尤其是在創建線程時。 這可能很快成為資源的相關浪費。 通過重新考慮您的方法,您可能可以實現您想做的事情。

您可以嘗試/遵循觀察者/可觀察的模式...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM