在同一解决方案C#下的两个项目中未共享静态数据成员
本文关键字:项目 两个 数据成员 静态 共享 解决方案 | 更新日期: 2023-09-27 18:21:35
我在同一个c#解决方案中有两个项目。一个项目是普通的wpf应用程序,另一个是windows服务。当wpf应用程序更新数据库中的一些变量时,windows服务需要相应地更新。在我的wpf应用程序中,我有一个保存方法,它更新像这样的静态字段
private void ConfigurationPanelSave_Click(object sender, RoutedEventArgs e)
{
bool isSuccess = SaveData();
if (isSuccess)
{
DatabaseInteractivity.HasChanges = true; //static member to indicate data has been changed
}
}
在windows服务项目中,我有DatabaseInteractivity对象和一个计时器事件,它在30秒间隔后被调用(查看数据是否已更改,如果更改,它会重新读取一些配置)
private void timer_elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
if (DatabaseInteractivity.HasChanges)
{
ConfigurationReader.ReadConfiguration();
DatabaseInteractivity.HasChanges = false;
}
}
问题是,当我通过wpf应用程序保存数据时,它会将DatabaseInteractivity类的静态成员(HasChanges)更新为true,而当调用timer_perated事件时,windows服务项目中的HasChanges总是false。当计时器事件被调用时,这不是第一次是真的吗?我读过很多文章和不同的方法,但我很想知道为什么它没有发生。
DatabaseInteractivity.HasChanges
。它们彼此完全无关;它们存在于记忆中的不同位置。改变其中一个对另一个没有影响。
您需要研究进程间的通信。例如,您的Windows服务可以提供WCF或Thrift服务端点,您的WPF应用程序可以连接到该端点。端点将有一个方法,应用程序将调用该方法来通知您的服务数据已保存。
静态对象在运行的线程中是静态的。
我猜您正在运行一个wpf应用程序线程和一个windows服务线程
即使dll(又名源)是相同的,它们仍然从不同的线程运行,并且不能访问其他变量。