我正在使用MVVM模式的中型WPF应用程序.ViewModels用于INotifyPropertyChanged刷新各自的视图.
这种方法很有效,除了一个问题:当这个应用程序长时间运行(3-7天)时,视图(整个应用程序中的每个视图!)突然停止更新它们的绑定属性.
如果我在ViewModels中设置一个断点,那么它们就会快乐地走开,呼唤PropertyChanged就像没有错.但是,如果我在View绑定的ViewModel对象的getter中设置断点,则永远不会调用getter!
我很难过,甚至不知道如何正确调试这个问题.我已检查Visual Studio输出窗口是否存在数据绑定错误,但一切看起来都很正常.几乎就像WPF数据绑定引擎在后台崩溃一样.此应用程序还监视未处理的异常(AppDomain.UnhandledException和Dispatcher.UnhandledException),但不会抛出任何异常.
简介:经过很长一段时间后,Views停止更新其数据绑定,但ViewModel仍在调用PropertyChanged事件.
任何建议???
我意识到这个问题可能取决于处理器,但希望有人可以指出我正确的方向.对于我的生活,我无法弄清楚如何将表示纳秒的无符号long long int转换为表示C中的秒的double(我使用32位big-endian PowerPC 405进行此特定测试,以及GNU C99编译器).
我试过了:
unsigned long long int nanoseconds = 1234567890LLU;
double nanoseconds_d = nanoseconds*1e-9;
Run Code Online (Sandbox Code Playgroud)
也:
nanoseconds_d = ((double) nanoseconds)*1e-9;
Run Code Online (Sandbox Code Playgroud)
对于这两种情况,我只得到0.我在这里做错了什么?
编辑添加完整的例子
#include <stdio.h>
#include <stdlib.h>
int
main( int argc, char *argv[] )
{
unsigned long long int nanoseconds = 1234567890LLU;
double nanoseconds_d = nanoseconds * 1e-9;
printf("%g\n", nanoseconds_d);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
MAKEFILE
SRCS = simple.c
INCLUDE := -I$(PWD)
CFLAGS := -O0 -g3 -Wall -fmessage-length=0 -mhard-float -fsigned-char -D_REENTRANT
LIBS := -lc
OBJS = $(SRCS:.c=.o)
PROG = $(SRCS:.c=).out …Run Code Online (Sandbox Code Playgroud)