Fórum Threads #21298

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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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:

1
barra.Value = 50;


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


1
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.

1
CheckForIllegalCrossThreadCalls = false;


Deve funcionar agora!

Abraço


Knight_of_wine

Knight_of_wine
Responder

Gostei + 3

Mais Posts

20/01/2016

Rodrigo Santos

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

Gostei + 0

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

Gostei + 0

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

Gostei + 0

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

Aceitar