Jump to content

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


Recommended Posts

Posted

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

Posted

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!

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

Posted

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

  • 1 year later...
Posted

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 😕

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.