Поскольку нажатие кнопки выполняется в потоке пользовательского интерфейса, и поэтому ваш цикл реализован в потоке пользовательского интерфейса, поэтому поток пользовательского интерфейса не выполняет обновления индикатора выполнения, пока вы используете этот поток для выполнения цикла: 3
я есть этот код C #, чтобы показать индикатор выполнения:
{
public partial class FormPesquisaFotos : Form
{
public FormPesquisaFotos()
{
InitializeComponent();
}
private void FormPesquisaFotos_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
//Mostra a barra de progresso da pesquisa
while (progressBar1.Value < 100)
progressBar1.Value += 1;
{
//Criar um objeto (instância, cópia) da classe FormResultadosFotos
FormResultadosFotos NovoForm = new FormResultadosFotos();
NovoForm.Show();
}
}
}
}
Он загружается только в конце поиска (после нажатия кнопки). Как можно запустить прогрессбар в начале поиска?
Вот код для отображения результатов в новой форме. Progressbar останавливается на 95% и через несколько секунд показывает результаты.
{
public partial class FormResultadosFotos : Form
{
public FormResultadosFotos()
{
InitializeComponent();
}
private void FormFotos_Load(object sender, EventArgs e)
{
// se pretendermos pesquisar em várias pastas
List<string> diretorios = new List<string>()
{@"\\Server\folder01\folder02"};
// se pretendermos pesquisar as várias extensões
List<string> extensoes = new List<string>()
{".jpg",".bmp",".png",".tiff",".gif"};
DataTable table = new DataTable();
table.Columns.Add("Nome e formato do ficheiro (duplo clique para visualizar a imagem)");
table.Columns.Add("Caminho ( pode ser copiado Ctrl+C )");
foreach (string diretorio in diretorios)
{
var ficheiros = Directory.EnumerateFiles(diretorio, "*", SearchOption.AllDirectories).
Where(r => extensoes.Contains(Path.GetExtension(r.ToLower())));
foreach (var ficheiro in ficheiros)
{
DataRow row = table.NewRow();
row[0] = Path.GetFileName(ficheiro);
row[1] = ficheiro;
table.Rows.Add(row);
}
}
dataGridView1.DataSource = table;
dataGridView1.Columns[1].Visible = true;
}
private void dataGridView1_DoubleClick(object sender, EventArgs e)
{
FormPictureBox myForm = new FormPictureBox();
string imageName = dataGridView1.CurrentRow.Cells[1].Value.ToString();
Image img;
img = Image.FromFile(imageName);
myForm.pictureBox1.Image = img;
myForm.ShowDialog();
}
}
}
Спасибо.