2015-12-15 2 views
0

Есть ли способ, которым я могу постоянно проверять свою программу при выполнении других задач?Как постоянно проверять что-то в WinForms/C#?

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

Чтобы уточнить, я не ищу решение с петлей, как:

while(!done){//do stuff} 

Я ищу что-то, что, возможно, встроенное, если это имеет смысл, как функция.

+1

Первое, что нужно знать о хорошем программировании, - это то, что вы должны перестать думать с точки зрения проверки или получения информации - пусть информация придет к вам. Как пользователь скажет вам, что они сделаны? Зачем следить? Почему бы просто не дождаться, когда они что-то сделают, чтобы сказать вам, что они сделаны? Пользователи взаимодействуют с интерфейсом. Каждое взаимодействие представляет собой событие - все, о чем вы должны беспокоиться, - это то, что только что сделал пользователь и что вы собираетесь с ним делать. –

+1

Это либо «цикл», либо «таймер». Также вы можете проверить это, когда пользователь изменил часть головоломки. –

+0

Согласовано с @J ... - вам не обязательно «постоянно» проверять, закончилась ли игра - она ​​может быть закончена только после того, как пользователь совершит переход, то есть когда вам нужно сделать проверку в Windows У форм у вас есть события для этого. – vesan

ответ

3

Либо использование интерфейса/обратного вызова, либо вы можете создать метод проверки завершения игры и передать ее в поток для проверки.

Пример:

private Thread checkThread; 

private void StartThreadMethod() 
{ 
     checkThread = new Thread(new ThreadStart(CheckGameComplete)); 
     checkThread.Start(); 
} 

public void CheckGameComplete() 
{ 
      // Do the checking here 
      // call checkThread.Stop() once checking is done. 
} 

Обратите внимание, что, так как это в другом потоке, а не поток пользовательского интерфейса, если критерии окончания игры в зависимости от пользовательского интерфейса, это не представляется возможным использовать это без делегирования пользовательского интерфейса ,

+0

Единственный способ, которым это правильный ответ, - это игра в реальном времени. Если это игра в реальном времени, она должна либо не быть помечена 'winforms', что нет, * или * ее не следует делать с winforms, что ужасно непригодно для такой вещи. –

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