나는 시뮬레이터가 일부 데이터를 계산하고 각 반복으로 이산 시간을 통해 이동하는 반복으로 구성된 시뮬레이션 프로세스를 사용합니다. 시뮬레이터를 지나면 일부 주기적 간격으로 구성 요소 매개 변수를 새 데이터로 업데이트해야합니다. 시뮬레이터의 구성 요소는 반복 계산에 사용됩니다.WPF C# .NET에서 실시간 시뮬레이션 프로세스의 시각화
현재 모델은 20 초 간격의 타이머를 기반으로합니다. 각 타이머 틱에 대해 시뮬레이터는 가능한 한 빨리 20 반복을 계산하고 나머지 시간 (20 초를 시뮬레이션하는 데 20 초 - 시간) 동안 새 데이터를 사용할 수있는 경우 구성 요소 매개 변수를 새 데이터로 업데이트합니다. 그것은 아주 좋은 작품이지만 ...
... 나는 MVVM 패턴을 사용하여 WPF에서 시각화 프로그램을 구현했고, 시뮬레이션이 시작되면 한 번 적절한 시간 간격으로 각 반복의 상태를 표시합니다. 따라서 각 반복이 1 초의 시간 간격을 나타내는 경우 해당 시각화 프로그램이 시각화 상태를 1 초마다 변경하기를 원합니다. 나는 시뮬레이터에서 상태를 위해 비주얼 라이저와 버퍼에서 타이머를 사용하여 작업을 수행했습니다. 기본적으로 시뮬레이터는 계산 된 상태를 대기열에 넣고 시각화 도우미는 각 타이머 틱을 대기열에서 빼낸다. 그것은 몇 가지 예외와 잘 작동합니다.
- 그것은 일정한 눈금 간격이 어렵습니다 그래서 vizualizer 빠른 때 비주얼 타이머 시뮬레이터 타이머 또는 주변에 다른 방법으로 다음 느린 경우 큐가 무한대로가는 (IT 프로세스, 쓰레드 우선 순위 등을에 따라 다름).
- 시각화하려는 모든 데이터에 대해 adn 구현 코드를 사용하면 구현 시간 오버 헤드 및 메모리 오버 헤드로 보입니다.
그래서 대체 솔루션을 생각하고있었습니다. 비주얼 라이저에 하나의 타이머가 있고 타이머의 각 틱에 대해 시뮬레이터에서 새 반복 계산을위한 비동기식 메서드를 백그라운드 스레드라고합니다. 비주얼 라이저의 비동기 콜백에서, visualizer는 시뮬레이터에서 새로운 계산 된 상태를 기반으로 시각화를 새로 고칩니다. 이 방법을 사용하면 시뮬레이터의 구성 요소를 새로 고치는 데 문제가 있습니다. 타이머 간격을 한 번 새로 고치려면 시간이 더 필요하기 때문입니다. 어쩌면 새로운 백그라운드 스레드에 구성 요소를 새로 고칠 수 있고 일단 업데이트가 완료되면 새로운 값을 구성 요소의 매개 변수 값에 복사하는 구성 요소에서 메서드를 호출하면됩니다.
또한 시뮬레이터는 실시간이기 때문에 실시간과 보조를 맞춰야합니다. 당신이 더 무슨 방법 말해 줄 수와 어떻게 접근을 향상시킬 수 있지만, 누군가 더 좋은 방법이 또한 만약 내가 그것을 읽고 그것을 사용 :
감사 기쁠 경우
도움이 될 것입니다.
MVVM 패턴을 사용 중이지만 한 가지 예외가 있습니다. 내 모델에 "inotify 속성이 변경되었습니다."일반적인 방법으로 구현되지 않았습니다. 나는 시뮬레이터의 상태를 읽은 뷰 모델의 업데이트 메소드를 호출하는 비주얼 라이저의 타이머를 가지고 있으며 뷰 모델 속성의 변경시 inotifypropertychanged가 발생합니다. – Vedran
수동 대신 자동 ("보통"방식) 업데이트를 사용해 보셨습니까? –
WPF 기반 응용 프로그램뿐만 아니라 콘솔 응용 프로그램에서도 모델을 사용할 수 있으므로보기 모델에 대한 모델을 알고 싶지 않기 때문에 그다지 좋아하지 않았습니다. 그러나 모델이 inotifyproperty 변경을 발생시키는 것을 고려하고있었습니다.또한 초를 고려할 것이라고 생각합니다. – Vedran