Отображать окно сообщения только один раз

Я использую следующий код для отображения окна сообщения при достижении уровня зарядки

private void timer1_Tick(object sender, EventArgs e)
    {
        battery = Convert.ToInt32(power.BatteryLifePercent * 100);

        while (battery == 100)
        {
            MessageBox.Show("charging full disconnect the charger");
        }
    }

этот код работает. но он показывает окно сообщения более одного раза. Я просто хочу показать это только один раз.

Спасибо

2 ответа

Без дополнительной информации трудно определить актуальную проблему. Тем не менее, вы, вероятно, можете быстро решить проблему, используя переменную для отслеживания того, отобразили ли вы сообщение.

PowerStatus power = SystemInformation.PowerStatus;

int battery = 0;
bool battery_message_shown = false;

if( battery == 100 && battery_message_shown == false )
{
  battery_message_shown = true;
  MessageBox.Show("charging full");
}

Хотя в идеале этот код просто не вызывался бы, если бы не пришло время показывать сообщение. Я должен был бы видеть большую картину, чтобы понять это все же.

Условие, связанное с вашим циклом while, никогда не будет достигнуто так, как оно закодировано. Вот почему тело цикла будет продолжать выполняться.

Вам необходимо встроить код, который изменяет или обновляет условие. Однако, если вы сделаете это, программа будет использовать много ресурсов, так как процесс зарядки батареи обычно занимает много времени. То, что вам тогда нужно будет сделать, это вероятно сделать thread.sleep в течение некоторого времени или лучше использовать таймер.

Этот пример кода делает нечто подобное и, вероятно, заслуживает рассмотрения в вашем случае: BlackWasp-PowerStatusCheck.

Другие вопросы по тегам