Я отправляю образец кода, чтобы декодировать проблему с большим кодом.Windows.Forms.Timer не работает должным образом
У меня есть 2 секунды таймер - System.Windows.Forms.Timer
Каждые 2 секунды я приращение глобального ИНТ на один, и показать его значение с помощью MessageBox Если INT достигает 4, я отключить главный флаг.
Вот код
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
bool Play_On = false;
int i = 0;
public Form1()
{
InitializeComponent();
}
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
private void button1_Click(object sender, EventArgs e)
{
if (button1.Text == "Play")
{
button1.Text = "Puase";
Play_On = true;
}
else
{
button1.Text = "Play";
Play_On = false;
}
}
private void Form1_Load(object sender, EventArgs e)
{
Timer MinResTimer = new Timer();
{
MinResTimer.Tick += new EventHandler(MinResTimer_Elapsed);
MinResTimer.Interval = 2000;
MinResTimer.Enabled = true;
MinResTimer.Start();
}
}
public void MinResTimer_Elapsed(object sender, EventArgs e)
{
if (Play_On == true)
{
MessageBox.Show("timed"+ i.ToString());
i++;
}
if (i == 4)
{
Play_On = false;
button1.Text = "Play";
}
}
}
}
Проблема заключается в том, что флаг разве выключению на всех. Выход, который я получаю, это Timed0 - В ящике сообщений много раз. У меня возникли проблемы с сообщением - не уверен
Может кто-нибудь помочь мне узнать, что происходит здесь?
Я не получил то, что вы сказали. Почему в таком почтовом ящике есть такая большая проблема? Если я поставлю инкремент i ++ перед сообщением, флаг все равно не будет отключен. Если я отключу и включу таймер, я могу потерять непрерывность, которую я не хочу использовать в своем более крупном приложении. – noob
@noob Я думаю, вы ожидаете, что код после 'MessageBox.Show' будет выполнен немедленно и в то же время после закрытия сообщения box ... Только один может произойти - в случае кода окна сообщения после того, как вызов будет выполнен после закрытия диалогового окна ... Вы можете создать собственное немодальное диалоговое окно, чтобы получить прежнее поведение. –
Итак, пока отображается сообщение, код после этого не будет запущен? – noob