У меня возникла проблема, когда первый элемент в коллекции отвечает на обновление, но нет других (из 40).Я искал ответы в сети, но, к сожалению, через пару дней я все еще ничего не получаю.
Код вызова, который запускает поток для цикла обнаружения:
_detectionThread = new Thread(() => _x.StartDetection());
_detectionThread.Start();
Iveполучил следующий код в одном из моих вспомогательных классов, который просто опрашивает, и когда что-то обнаруживается, в качестве события вызывается View-Model:
public event EventHandler SomethingIsDetected;
private void OnSomethingDetected()
{
if (SomethingIsDetected!= null)
{
SomethingIsDetected(this, new EventArgs());
}
}
Код для цикла обнаружения:
var startCheckTime = DateTime.Now;
var nextCheck = startCheckTime.AddSeconds(PollingInterval.TotalSeconds);
while (_performDetection)
{
startCheckTime = DateTime.Now;
if (startCheckTime >= nextCheck)
{
nextCheck = startCheckTime.AddSeconds(PollingInterval.TotalSeconds);
{
var detectionTask = Task.Factory.StartNew(() => IsXConnected());
IsXPresent = detectionTask.Result;
Thread.Sleep(TimeSpan.FromSeconds(1));
if (IsXPresent)
{
Application.Current.Dispatcher.Invoke(new Action(OnSomethingDetected));
}
}
}
Thread.Sleep(10);
}
Код для обновления предметов.Представление связано со свойствами здесь (особенно CurrentItem).Предметы - это ObservableCollection
foreach (var item in Items) //loop through 40 items
{
//do some operation then set the current item
Application.Current.Dispatcher.Invoke(new Action(() => CurrentItem = item));
}
Пока я прохожу (с помощью отладочного конвертера), я замечаю, что элемент обновляется только в первый раз.Остальное просто проходит.Я установил свойство CurrentItem с DependencyProperty.
Я пытался использовать CheckAccess, чтобы использовать свойство Delegate и udpate, и это тоже не помогло.
Любая помощь приветствуется и спасибо!