Jump to content

Recommended Posts

Posted

Olá a todos,

esta pergunta deve ser fácil, mas nao estou a conseguir lá chegar. Estou a tentar criar um pequeno GUI que cria uma thread que tem um ciclo e de segundo a segundo lança um evento e era suposto actualizar uma textbox.

No entanto... Está a causar-me uma excepção dizendo que estou a actualizar o GUI de outra thread.

o código que tenho é o seguinte:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using System.Threading;

namespace guiEvent
{

class ClasseQueVaiGerarEventos{

 public delegate void funcaoaserchamada(object produtor,EventArgs args);
 public event funcaoaserchamada evento;

 public void ciclo(){
Thread.Sleep(1000);
evento(this,new EventArgs());
 }

}


/// <summary>
/// Description of MainForm.
/// </summary>
public partial class MainForm : Form
{
 public MainForm()
 {
  //
  // The InitializeComponent() call is required for Windows Forms designer support.
  //
  InitializeComponent();

  //
  // TODO: Add constructor code after the InitializeComponent() call.
  //
 }

 void MainFormLoad(object sender, EventArgs e)
 {

  ClasseQueVaiGerarEventos classegeradora = new ClasseQueVaiGerarEventos();
  classegeradora.evento+= new ClasseQueVaiGerarEventos.funcaoaserchamada(ActualizaGui);

  Thread threadciclo;

  threadciclo = new Thread(new ThreadStart(classegeradora.ciclo));

  threadciclo.Start();

  textBox.Text="Init";

  //ActualizaGui(this,new EventArgs());

 }

 private void ActualizaGui(object produtor, EventArgs args){
  textBox.Text="FUNCIONOU";  
 }
}
}

se me puderem dar uma ajuda a perceber o que se passa agradecia.

Cumprimentos, Mauro.

Posted

Olá bioshock,

desde já obrigado pela resposta, o teu artigo está mto porreiro, mas mesmo assim nao percebo pq é que o meu código nao funciona.

Pensava que ele ia criar a thread e lançar o evento e o método que vai ser chamado em resposta a esse evento devia estar na thread do GUI... parece que não está, porque?

Podes explicar no meu codigo?

Cumps, Mauro.

Posted

Se lesses o artigo em condições vias que lá falo do teu problema, Vê os dois primeiros quotes do artigo.

E depois mais abaixo dou a solução:

/* And here goes the validation code for processing information for different threads */

textBox1.Invoke((MethodInvoker) delegate { textbox1.Text = dR[0].ToString(); });

Posted

Viva,

sim eu vi que falavas do meu problema, mas nesta solução estás a criar um método anónimo certo?

não dá para escolher qual a função a ser chamada?

Mauro.

Estou a confundir isto...

essa parte que me deste já é dentro do método que é chamado em resposta ao evento.

Vou pesquisar mais um pco!

Cumps, Mauro.

Posted

Olá nelsonr,

sim eu percebi isso, mas a minha questão agora é... porque é que (no caso do meu programa) preciso de o usar!

pela minha logica o metodo "private void ActualizaGui(object produtor, EventArgs args)" seria executado na mesma thread dos controlos.

porque não é?

Cumps, Mauro.

Posted

Ok nelsonr percebi!

então outra questão, eu queria incluir a classe que gera os eventos numa dll que seria dps usada noutra aplicação, e queria uma forma facil de na aplicação que for criada consumir o evento e actualizar o GUI, esta é a unica forma de o fazer?

Cumprimentos, Mauro.

  • 1 month later...

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.