의 구조다른 클래스에서 여러 양식에 업데이트 이벤트를 보내기 - WPF
내가 꽤 정기적으로 업데이트를 확인 타이머를 발생시키는 간단한 양식을 가지고있다. 부하에서 시작 폼의 생성자는 그래서 다음과 같습니다
public MainWindow()
{
InitializeComponent();
otherWindow = new TheOtherWindow();
if (Meta.hasUpdate)
{
updateImage.Source = new BitmapImage(new Uri("/MyProject;component/Images/updateTrue.gif", UriKind.Relative));
}
Thread updateMonitor = new Thread(() =>
{
UpdateManager updater = new UpdateManager();
updater.StartUpdateMonitor();
});
updateMonitor.IsBackground = true;
updateMonitor.Start();
}
메타 클래스는 여러 곳에서 참조 그러나 때때로 업데이트되는 다양한 문자열을 저장, 아주 기본적인 정보가 포함되어 있습니다. 그 구조 중 이것이다 :
class Meta
{
...
private static bool hasUpdate = false;
public static bool GetHasUpdate()
{
return hasUpdate;
}
public static void SetHasUpdate(bool value)
{
hasUpdate = value;
}
}
다른 부분은 업데이트를 5 분마다 확인하는이 작은 루틴을 포함하는 UpdateManager를 클래스입니다.
class UpdateManager
{
Timer timer;
public void CheckForUpdates(Object source, ElapsedEventArgs e)
{
if (!isUpToDate())
{
timer.Stop();
Meta.SetHasUpdate(true);
Application.Current.Dispatcher.Invoke(new Action(() =>
{
MessageBox.Show("A new update is now available!);
}));
}
}
public void StartUpdateMonitor()
{
float updateInterval = 300000;
timer = new Timer(updateInterval); // Milliseconds between checks.
timer.Elapsed += CheckForUpdates;
timer.AutoReset = true;
timer.Enabled = true;
}
}
문제점 한마디로
, 나는 Meta.SetHasUpdate()가 다음을 변경의 목적으로 응용 프로그램에서 모든 폼이 방송 것을 도달 할 때마다 이벤트를 해고 할 업데이트가 있음을 나타내는 작은 아이콘.
내 시도로 인해 INotifyPropertyChanged를 구현하면 정적 멤버와 잘 작동하지 않는다는 것을 알게되었습니다. 이것은 그 구현에 내 시도했다 ...
class Meta : INotifyPropertyChanged
{
...
private static bool hasUpdate = true;
public static bool GetHasUpdate()
{
return hasUpdate;
}
public static void SetHasUpdate(bool value)
{
hasUpdate = value;
NotifyPropertyChanged();
}
private static void NotifyPropertyChanged()
{
if (PropertyChanged != null)
{
PropertyChanged(null, new PropertyChangedEventArgs("hasUpdate"));
}
}
}
이 회원은 다시 여러 형태의 읽을 필요가 있기 때문에, 내가하지 않는, 많은 주위 물체를 통과하지 않고 그들을 정적이지 수 없습니다 하고 싶다.
이 경우 여러 양식이 Meta 클래스에서받을 수있는 이벤트를 어떻게 시작합니까? 다른 구조를 고려해야합니까, 아니면 INotifyPropertyChanged를 오해하고 있습니까?
하는 싱글 메타은의를 사용하십시오 메타은 다음과 같은 구조를 가지고 객체를 가져와 해당 소품에 액세스하는 인스턴스입니다. 그들은 INotify 또는 propdp''를 사용할 수 있습니다. 만약 propdps를 사용하면 wpf의 bindningsystem을 통해 수정자를 바꿀 때 updater를 제거 할 수 있습니다. –
정적 속성 변경은 가능하지만 다른 점은 모든 것을 가져와야합니다. 세부 정보 : https://stackoverflow.com/a/41823852/424129 –