Threads

01/04/2009

0

Olá!

Sou novato em c#, venho do Java e estou tendo algumas dificuldades para entender o funcionamento e permissões das threads em c.

Estou fazendo um aplicativo para um cliente, e resolvi mudar de linguagem, então resolvi mergulhar no C.

O meu problema é o seguinte, tenho um Form de login com o MySQL e gostaria de criar 2 threads. Uma para fazer a conexão sem travar o Form e outra para a progressBar.

O código segue abaixo:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ControleGeral_DB;
using System.Threading;

namespace ControleGeral
{
    public partial class Logar : Form
    {
        private MainMDI mdi;
        
        public Logar(MainMDI mdi)
        {
            InitializeComponent();
            this.mdi = mdi;
            
        }

        private void bLogar_Click(object sender, EventArgs e)
        {
            Thread thread = new Thread(new ThreadStart(logar));
            Thread threadBar = new Thread(new ThreadStart(bar));
            thread.Start();
            threadBar.Start(); 
        }

        private void bar()
        {
            barra.Value = 50;
        }

        private void logar()
        {
            try
            {
                Loggin.start(tUsuario.Text, tSenha.Text, BS.Util.Conf.Conf.Instance.getValue("database"), BS.Util.Conf.Conf.Instance.getValue("ip"));
            }
            catch (System.Exception exception)
            {
                MessageBox.Show("Nome de usuário ou senha inválida!");
                return;
            }

            MessageBox.Show("Bem vindo " + tUsuario.Text + "!");
            mdi.Text = "Controle Geral - BS Soluções Tecnológicas #" + tUsuario.Text + "";
            this.Close();
        }

        
    }
}



Bom, como resultado, em tempo de execução tenho o seguinte erro:

[list:b58f14f3a5]Operação entre threads inválida: controle ´barra´ acessado de um thread que não é aquele no qual foi criado.[/list:u:b58f14f3a5]

E através de testes vi que é quando o programa chega nas seguintes linhas:

barra.Value = 50;


mdi.Text = "Controle Geral - BS Soluções Tecnológicas " + tUsuario.Text + "";


 this.Close();


Fico muito grato pela ajuda que me derem.


Giovanibarili

Giovanibarili

Responder

Post mais votado

03/04/2009

Salve salve!

O que você deve fazer é simplesmente adicionar o código abaixo no evento load do seu form.

CheckForIllegalCrossThreadCalls = false;


Deve funcionar agora!

Abraço


Knight_of_wine

Knight_of_wine
Responder

Mais Posts

20/01/2016

Rodrigo Santos

cara, estava com o mesmo problema, funcionou perfeitamente sua sugestão, obrigado pela dica.
Responder

15/04/2019

Joel Coutinho

Muito obrigado pelo post aqui colocado pelo DevMedia, cara estava com o mesmo problema e este comando me salvou, CheckForIllegalCrossThreadCalls = false;.
Valeu pessoal da DevMedia =)).
Responder

17/10/2022

Luigi Nogueira

Muito obrigado pelo post aqui colocado pelo DevMedia, cara estava com o mesmo problema e este comando me salvou, CheckForIllegalCrossThreadCalls = false;.
Valeu pessoal da DevMedia =)).


Gente, cuidado ao usar o CheckForIllegalCrossThreadCalls = false;.
O meu mentor me instruiu a usar somente quando for necessário, ele não corrige o erro citado, o Check força uma Thread errada.]
Estou com o mesmo erro em tela, mas fui instruído a fazer por Delegates e Invoke.
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar