[英]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.