Usuário com melhor resposta
Para um Thread

Pergunta
-
Olá, tenho um form com progressbar para indicar atividade que é aberto quando começo a popular um datagrid.
Peguei um código aqui no MSDN e adaptei para minha necessidade, funcionou perfeitamente, mas a surgiu uma dúvida:
Quando o form que é aberto em uma thread separada é fechado, automaticamente para a thread ou tenho que informar o fim dela?
Segue código:
public partial class frmConsultaProduto : GUI.frmModeloConsulta { private frmLoading loading = new frmLoading(); private delegate void FechaPopUp(); public int codigo = 0; public frmConsultaProduto() { InitializeComponent(); } private void btnLocalizar_Click(object sender, EventArgs e) { ProcessarInfo(); try { DALConexao cx = new DALConexao(DadosDaConexao.StringDeConexao); BLLProduto bll = new BLLProduto(cx); dgvConsProduto.DataSource = bll.Localizar(txbConsNome.Text); dgvConsProduto.Columns[0].HeaderText = "Código"; dgvConsProduto.Columns[0].Width = 60; dgvConsProduto.Columns[0].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; dgvConsProduto.Columns[1].HeaderText = "Produto"; dgvConsProduto.Columns[1].Width = 100; dgvConsProduto.Columns[1].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft; dgvConsProduto.Columns[2].HeaderText = "Descrição Longa"; dgvConsProduto.Columns[2].Width = 300; dgvConsProduto.Columns[2].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft; dgvConsProduto.Columns[3].HeaderText = "Foto"; dgvConsProduto.Columns[3].Width = 60; dgvConsProduto.Columns[3].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight; dgvConsProduto.Columns[4].HeaderText = "Valor Pago"; dgvConsProduto.Columns[4].Width = 100; dgvConsProduto.Columns[4].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight; dgvConsProduto.Columns[5].HeaderText = "Valor Venda"; dgvConsProduto.Columns[5].Width = 100; dgvConsProduto.Columns[5].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight; dgvConsProduto.Columns[6].HeaderText = "Quant."; dgvConsProduto.Columns[6].Width = 100; dgvConsProduto.Columns[6].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight; dgvConsProduto.Columns[7].HeaderText = "Unid. Med."; dgvConsProduto.Columns[7].Width = 85; dgvConsProduto.Columns[7].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; dgvConsProduto.Columns[8].HeaderText = "Grupo"; dgvConsProduto.Columns[8].Width = 150; dgvConsProduto.Columns[8].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft; dgvConsProduto.Columns[9].HeaderText = "Sub Grupo"; dgvConsProduto.Columns[9].Width = 150; dgvConsProduto.Columns[9].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft; this.Invoke(new FechaPopUp(this.FecharPopUp)); } catch (Exception erro) { this.Invoke(new FechaPopUp(this.FecharPopUp)); MessageBox.Show(erro.Message); } } private void dgvConsProduto_CellDoubleClick(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex >= 0) { this.codigo = Convert.ToInt32(dgvConsProduto.Rows[e.RowIndex].Cells[0].Value); this.Close(); } } private void ProcessarInfo() { Thread thProcessa = new Thread(Open_Forn); thProcessa.Start(); } private void Open_Forn() { loading.ShowDialog(); } private void FecharPopUp() { loading.Close(); } } }
Desde já agradeço.
abçs;
- Editado Cleber Brandão sábado, 5 de agosto de 2017 20:50
Respostas
-
Cleber, nao é preciso. Ao fechar a tela aberta como diálogo a thread é finalizada. Caso queira garantir que ela seja finalizada, seria necessário declarar a variavel da thread no escopo da classe e inicializar na função ProcessarInfo() e na função FecharPopUp parar a thread e descarregar a variável. Mas não muda em nada ja que a thread é finalizada naturalmente. Apos o GC do Framework limpar a memoria sua aplicação não terámais nada em memoria.
- Marcado como Resposta Cleber Brandão domingo, 6 de agosto de 2017 19:28
Todas as Respostas
-
Cleber, nao é preciso. Ao fechar a tela aberta como diálogo a thread é finalizada. Caso queira garantir que ela seja finalizada, seria necessário declarar a variavel da thread no escopo da classe e inicializar na função ProcessarInfo() e na função FecharPopUp parar a thread e descarregar a variável. Mas não muda em nada ja que a thread é finalizada naturalmente. Apos o GC do Framework limpar a memoria sua aplicação não terámais nada em memoria.
- Marcado como Resposta Cleber Brandão domingo, 6 de agosto de 2017 19:28
-