2012-06-04 2 views
1

Я сейчас изучаю проект моделирования трафика. Однако у меня проблема с приостановкой моделирования. Каждый автомобиль рассматривается как нить в моем приложении. Когда выполняется симуляция (Автомобили на перемещение сетки) Я хочу приостановить его.Как приостановить поток от изменения данных и вернуться на C#?

Thread.suspend() метод не работает, так как я должен остановить поток от изменения данных.

Скажем, если есть автомобиль на дороге, и я нажимаю на кнопку паузы, то автомобиль должен оставаться там, и когда я нажимаю кнопку запуска он должен быть в состоянии возобновить. Я не могу заставить потоки спать напрямую, так как он будет блокировать UI.

Любые идеи?

Заранее спасибо.

+0

_I не может заставить потоки спать напрямую, так как он блокирует UI_. Вы используете отдельные рабочие потоки для автомобилей. Почему приостановление рабочего потока блокирует пользовательский интерфейс, который работает в основном потоке? –

+0

На самом деле, это довольно странно, когда я использую myThread.suspend(); он не блокирует ui; однако, когда я хочу, чтобы он спал в течение определенного времени с помощью метода thread.sleep(), ui блокируется. – Serhat

+0

thread.sleep() заставляет текущий поток спать в течение определенного времени. Если вы вызываете это в ответ на нажатие вашей кнопки, тогда поток пользовательского интерфейса не будет отвечать, поскольку он спящий для этой продолжительности. – tinman

ответ

2

Вы не приостанавливаете нить. Если вы считаете, что каждый автомобиль должен быть в своей нити, дайте каждому автомобилю метод «Пауза», который не позволит ему двигаться (но продолжать реагировать на другие вещи).

Я не думаю, что вам нужна нить за автомобиль. Почему бы не привести несколько движущихся автомобилей в ответ на таймер?

+0

У меня так много потоков на автомобили, и тогда у меня есть класс пересечения, который содержит определенное количество автомобилей. Но пересечение также является потоком, так как у нас будет много переходов одновременно. И причина того, что нить за автомобиль позволяет каждому повороту поворачиваться. Поскольку некоторые из них будут идти разными направлениями, мы не можем иметь их как группу. Спасибо за Ваш ответ. – Serhat

+0

Но я постараюсь дать каждому автомобилю метод «пауза» и сообщить вам о результате. – Serhat

+0

Я сделал, как вы сказали, и теперь он делает паузу успешно, я пытался приостановить все автомобили вместе, а не один за другим :) Большое спасибо. – Serhat

Смежные вопросы