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
            [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ódigo

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:

#Código
barra.Value = 50;


#Código
mdi.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.