Array
(
    [0] => stdClass Object
        (
            [Votos_Balanceados] => 1
            [id] => 21299
            [titulo] => Threads
            [dataCadastro] => DateTime Object
                (
                    [date] => 2009-04-03 00:00:00
                    [timezone_type] => 3
                    [timezone] => America/Sao_Paulo
                )

            [isFirstPost] => -1
            [idUsuario] => 234727
            [status] => A
            [isExample] => 
            [NomeUsuario] => Knight_of_Wine
            [Login] => forum.Knight_of_Wine
            [Apelido] => 
            [Foto] => 
            [Conteudo] => Salve salve!

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

[code:1:7e36c3ca52]CheckForIllegalCrossThreadCalls = false;[/code:1:7e36c3ca52]

Deve funcionar agora!

Abraço


) )

Threads

Giovanibarili
   - 01 abr 2009

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:

#Códigousing 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:

#Códigobarra.Value = 50;

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

#Código this.Close();

Fico muito grato pela ajuda que me derem.

Post mais votado

Knight_of_wine
   - 03 abr 2009

Salve salve!

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

#Código:1:7e36c3ca52]CheckForIllegalCrossThreadCalls = false;:1:7e36c3ca52]

Deve funcionar agora!

Abraço

Rodrigo Santos
|
MVP
    20 jan 2016

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