E
EuGenius
Окно во время заполнения прогрессбара не реагирует на действия пользователя, хотя вроде заполнение происходит в асинхронном методе.
Почему форма виснет при заполнении прогрессбара?
вот код (FW 2.0):
Почему форма виснет при заполнении прогрессбара?
вот код (FW 2.0):
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace ProgressBar
{
public partial class Form1 : Form
{
private delegate void Async();
private void Progress()
{
pictureBox1.Invoke(new MethodInvoker(delegate { pictureBox1.Visible = true; }));
for (float i = 0; i < 30000; i++)
{
progressBar1.Invoke(new MethodInvoker(delegate { progressBar1.Value = (int)i; }));
}
pictureBox1.Invoke(new MethodInvoker(delegate { pictureBox1.Visible = false; }));
}
public Form1()
{
InitializeComponent();
}
private void btnEnter_Click(object sender, EventArgs e)
{
try
{
progressBar1.Value = Convert.ToInt32(textBox1.Text);
}
catch (Exception)
{
MessageBox.Show("При выполнении преобразования типов возникла ошибка");
return;
}
}
private void btnStart_Click(object sender, EventArgs e)
{
Async prdelegate = new Async(Progress);
AsyncCallback cb = new AsyncCallback(CallBackMethod);
prdelegate.BeginInvoke(cb, prdelegate);
}
private void CallBackMethod(IAsyncResult ar)
{
Async prdelegate = (Async)ar.AsyncState;
prdelegate.EndInvoke(ar);
}
}
}