У меня есть список, связанный с коллекцией.Wpf Dispatcher Pause and Continue
Коллекция обновляется с помощью диспетчера dispatcher.current, так что элементы постепенно добавляются в представление списка.
Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() =>
{
if(continueDispatcher)numDone = DoStuff();
}));
Это работает очень хорошо, и флаг continueDispatcher останавливает поток в самом зародыше, это круто, но я хотел бы, чтобы иметь возможность продолжать диспетчерские операции на кнопку мыши.
Я прочитал о рамах диспетчера и т.п., но я, похоже, не могу найти решение, которое работает.
У кого-нибудь есть идеи по этому вопросу?
Edit - Подробнее Код
//for each image
foreach (var result in results)
{
result.Type = type;
numDone = LoadImagesAsync(result, numDone, total);
}
private int LoadImagesAsync(Item result, int numDone, int total)
{
Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() =>
{
//keep looping
while (true)
{
//if the dispatcher is paused then continue the loop
if (DispatcherPaused) continue;
//if the dispatcher is not paused then perform the action and break out of the loop
numDone = DoStuff(result, numDone, total);
break;
}
}));
return numDone;
}
private int DoStuff(Item result, int numDone, int total)
{
ItemList.Add(result);
numDone++;
ProgressBarValue = ((double) numDone/total)*100;
return numDone;
}
- C#
- Visual Studio 2012
Извините, я просто не понимаю, что вы пытаетесь сделать. И как этот флаг * останавливает поток, мертвый на своих дорожках *? – Dirk
Почему бы не положить его в бесконечный цикл? например 'while (true) {if (continueDispatcher) numDone = DoStuff();}' – Bijan
@Bizz Это работает, но он блокирует пользовательский интерфейс при запуске цикла. –