Threads
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:
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:
Fico muito grato pela ajuda que me derem.
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
Curtidas 0
Melhor post
Knight_of_wine
03/04/2009
Salve salve!
O que você deve fazer é simplesmente adicionar o código abaixo no evento load do seu form.
Deve funcionar agora!
Abraço
O que você deve fazer é simplesmente adicionar o código abaixo no evento load do seu form.
CheckForIllegalCrossThreadCalls = false;
Deve funcionar agora!
Abraço
GOSTEI 3
Mais Respostas
Rodrigo Santos
01/04/2009
cara, estava com o mesmo problema, funcionou perfeitamente sua sugestão, obrigado pela dica.
GOSTEI 0
Joel Coutinho
01/04/2009
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 =)).
Valeu pessoal da DevMedia =)).
GOSTEI 0
Luigi Nogueira
01/04/2009
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 =)).
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.
GOSTEI 0