Я просмотрел несколько примеров, размещенных в Интернете, но я не могу ответить на мой вопрос.Как обновить пользовательский интерфейс Silverlight при обработке
У меня есть переменная 'p', которая увеличивается на 1 в цикле for. Я хочу, чтобы пользовательский интерфейс отображал ход вычисления (чтобы показать, как «p» увеличивается с 0 до 1000000). Я делаю расчет в отдельном потоке и диспетчер звонков, чтобы обновить ResultBox в пользовательском интерфейсе. Пример:
int p=0;
...
private void GO(object sender, System.Windows.RoutedEventArgs e)
{
new Thread(delegate()
{
DoWork();
}).Start();
}
void DoWork()
{
for (int i = 0; i < 1000; i++)
{
for (int j = 0; j < 10000; j++)
{
p++;
this.Dispatcher.BeginInvoke(delegate { ResultBox.Text = p.ToString(); });
}
}
}
По какой-то причине это не работает. Однако, когда я помещал Thread.Sleep (1) непосредственно перед этим. Dispatcher ... он работает по назначению. Означает ли это, что обновление пользовательского интерфейса (Диспетчер) вызывается слишком часто, поэтому оно зависает? Есть ли другой способ сделать это?
Спасибо
Я достиг этого, добавив диспетчер времени, который обновляет интерфейс с интервалом = нуль. Тем не менее, ваше объяснение по-прежнему необходимо, потому что, когда я следую концепции, представленной в коде выше, работает отлично в WPF. – Marcin