private void progressBar_razbor_zaprosov_Click(object sender, EventArgs e)
{
for (int i = 0; i < 100; i++)
{
progressBar_razbor_zaprosov.Value = i;
Thread.Sleep(10);
}
}
ProgressBar
Нажимая кнопку на одной форме появляется другая форма с элем. управ. ProgressBar, который сразу начинает работать (двигаться) без каких-либо др. действий с моей стороны, но это не получается.
Код:
Этот код работает, но только если кликнуть по ProgressBar. А др. подходящих событий вроде нет.
Пожалуйста, подскажите, что тут можно предпринять.
Спасибо.
P.S. Работаю в Visual C# 2008.
потоки. Ну или банально таймером сделать.
Читаем про
Код:
public Form1()
{
InitializeComponent();
System.Timers.Timer tmr = new System.Timers.Timer(1000);
tmr.Enabled = true;
tmr.Elapsed += new ElapsedEventHandler(tmr_Elapsed);
}
void tmr_Elapsed(object sender, ElapsedEventArgs e)
{
for (int i = 1; i < 100; i++)
{
progressBar1.Value = i;
}
}
{
InitializeComponent();
System.Timers.Timer tmr = new System.Timers.Timer(1000);
tmr.Enabled = true;
tmr.Elapsed += new ElapsedEventHandler(tmr_Elapsed);
}
void tmr_Elapsed(object sender, ElapsedEventArgs e)
{
for (int i = 1; i < 100; i++)
{
progressBar1.Value = i;
}
}
Компилятор пишет:
Недопустимая операция в нескольких потоках: попытка доступа к элементу управления "progressBar1" не из того потока, в котором он был создан.
Будь добр, подскажи, как это решить.
Но если это не устраивает, а нужно запустить именно ваш код, то прописываем его в событии Shown формы.
Код:
private Timer time = new Timer();
// Call this method from the constructor of the form.
private void InitializeMyTimer()
{
// Set the interval for the timer.
time.Interval = 250;
// Connect the Tick event of the timer to its event handler.
time.Tick += new EventHandler(IncreaseProgressBar);
// Start the timer.
time.Start();
}
private void IncreaseProgressBar(object sender, EventArgs e)
{
// Increment the value of the ProgressBar a value of one each time.
progressBar1.Increment(1);
// Display the textual value of the ProgressBar in the StatusBar control's first panel.
statusBarPanel1.Text = progressBar1.Value.ToString() + "% Completed";
// Determine if we have completed by comparing the value of the Value property to the Maximum value.
if (progressBar1.Value == progressBar1.Maximum)
// Stop the timer.
time.Stop();
}
// Call this method from the constructor of the form.
private void InitializeMyTimer()
{
// Set the interval for the timer.
time.Interval = 250;
// Connect the Tick event of the timer to its event handler.
time.Tick += new EventHandler(IncreaseProgressBar);
// Start the timer.
time.Start();
}
private void IncreaseProgressBar(object sender, EventArgs e)
{
// Increment the value of the ProgressBar a value of one each time.
progressBar1.Increment(1);
// Display the textual value of the ProgressBar in the StatusBar control's first panel.
statusBarPanel1.Text = progressBar1.Value.ToString() + "% Completed";
// Determine if we have completed by comparing the value of the Value property to the Maximum value.
if (progressBar1.Value == progressBar1.Maximum)
// Stop the timer.
time.Stop();
}
Вроде, то что нужно, но вот с Tick (time.Tick) не могу разобраться (в какие-то дебри уводит, а может сам увожусь туда...). Не подкинешь мыслишку?