Я пишу приложение, которое имитирует алгоритмы поиска пути. Я могу запустить алгоритм или выполнить его (например, отладка). Но когда я запускаю алгоритм, я не могу сделать никаких изменений до тех пор, пока алгоритм не будет выполнен.Как разрешить сообщения во внутреннем цикле
private void menu_run_Click(object sender, EventArgs e)
{
algorithm.Reset();
while (algorithm.status == Algorithm.Status.Searching)
{
algorithm.MakeStep();
if (this.speed != 0) System.Threading.Thread.Sleep(this.speed);
drawing_area.Invalidate();
}
}
Я думаю, это потому, что я делаю все это в одном цикле и система не в состоянии обрабатывать новые сообщения (события), которые я инициирую.
Итак, как мне изменить свой код, чтобы иметь возможность перерисовывать изменения после каждой итерации?
- Должен ли я каким-либо образом вызвать Message Dispatcher, чтобы он обрабатывал новые сообщения после каждой итерации?
- Должен ли я создавать собственные сообщения и выполнять всю работу внутри цикла с помощью сообщений?
- Или нет более элегантного способа я?
В качестве быстрого ответа 'Application.DoEvents' запускает обработку очереди сообщений, поэтому может потребоваться то, что вы хотите. Вызовите его после 'Invalidate', и он должен обработать перерисовку области рисования. Тем не менее, компонент Timer, вероятно, будет более полезен. – Luaan