• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

AJV

Cross-thread operation not valid - Visual Studio 2005 Beta 2

7 mensagens neste tópico

Boas..

Tou a fazer um programa para ligar um PC, a um modem GSM através da porta série para poder fazer envio de SMS, e posteriormente o envio de dados.

Tou a usar o visual Studio 2005, a versão beta 2. Mas estou com um problema.

Tou a usar o controlo serialport que vem inserida na framework V2.

O problema está que, quando recebo bytes da porta série queria ir colocando-os numa textBox, mas o visual studio dá-me um erro estranho:

"Additional information: Cross-thread operation not valid: Control 'textBox1' accessed from a thread other than the thread it was created on."

Se eu tentar aceder á textBox através do envento de um click num botão não tenho problemas, só dentro do evento de receber dados da porta série.

Segue o codigo que estou a utilizar:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;

namespace WindowsApplication1
{
public partial class Form1 : Form
{
	public Form1()
	{
		InitializeComponent();
	}
	private void Comm_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
	{
		String a;
		a += Comm.ReadExisting();
		textBox1.Text = a;
	}

	private void button1_Click(object sender, EventArgs e)
	{
		Comm.Open();
		textBox1.Text = "OLA MUNDO";
	}

	private void button2_Click(object sender, EventArgs e)
	{
		Comm.Close();
	}

	private void Form1_FormClosed(object sender, FormClosedEventArgs e)
	{
		Comm.Close();
	}
}
}

Tenho o mesmo erro se fizer em C++, ou em basic. Mas se usar o controlo MSCOMM32.ocx no basic, já não tenho erro nenhum.

Se houver uma maneira simples de resolver isto, será que alguem me pode dar umas indicações, senão terei que usar o MSCOMM32.ocx.

Obrigado

Artur Vieira

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Alguns objectos, neste caso tudo o que seja relacionado com o GUI, só podem ser acedidos/modificados pela propria thread que os criou. O VS deve dar-te esse erro para te avisar de antemão que isso são irá funcionar!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Alguns objectos, neste caso tudo o que seja relacionado com o GUI, só podem ser acedidos/modificados pela propria thread que os criou. O VS deve dar-te esse erro para te avisar de antemão que isso são irá funcionar!

Bem-vindo ao forum Mal-Functi....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas..

Se compilar em modo release, e executar o .exe directamente sem ser através do visual studio não dá nenhum erro, dá-me a ideia que é somente um aviso do visual studio, o chato, é que em modo debug mesmo que faça continuar o programa, ele para e fecha, não continua a correr.

Eu queria saber como resolver este problema, para poder correr o programa em modo debug, nem que seja em C++, ou visual basic. Não tenho preferencia pela linguagem, isto é um programa para aprender a fazer algumas coisas em qualquer das 3 linguagens (C++, basic ou C#).

Obrigado.

Artur Vieira

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

bom esse erro ocorre quando tas a tentar aceder a um controlo q não pertence a thread q esta actualmente a correr

tens 2 maneira de resolver esse problema

a primeira não te aconselho...  é so meteres isto imediatamente antes do sitio onde da a exception:

CheckForIllegalCrossThreadCalls = false

a segunda é fazeres o seguinte:

- Verificar se precisas de invocar a outra thread

Se sim, invocas

Se não fazes a alteração a textbox directamente

ou seja será algo deste genero

if(InvokeRequired)
{
     Invoke((MethodInvoker)delegate{ textbox.Text = "FUNCIONOU!!!"; })
}
else
{
     textbox.Text = "FUNCIONOU!!!";
}

depois diz-me se conseguiste :confused:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

epa... são assuntos q ficaram por resolver...

e como não sei se ja foram resolvidos ou não

limito-me a dar a minha opinião sobre o assunto

se ajudar

tudo be

se não ajudar... olha.... paciencia!!!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora