Threads enviar dados
30/08/2011
0
Bom dia,
Estou iniciando no forum e na parte de C#. Estou tentando montar uma execução de duas threads que possam controlar um mesmo recurso ao mesmo tempo, em outras palavras, montei um form com dois campos de textbox e acionei as Threads. Quando a primeira thread acessa os textbox's ela coloca um dado EX: 1 e quando a segunda thead acessa os textbox's ela coloca outro valor Ex. 0.
Infelizmente apesar dos acessos serem em momentos diferentes mas sequencial (um acessa e depois o outro) estou com problemas para conseguir realizar o processo. Os problemas variam desde erro de acesso de objeto não criado na thead a não mostrar o valor. Bom abaixo segue o código, se alguem puder dar uma ajuda, ja estou a alguns dias em cima deste contexto.
Obrigado.
Estou iniciando no forum e na parte de C#. Estou tentando montar uma execução de duas threads que possam controlar um mesmo recurso ao mesmo tempo, em outras palavras, montei um form com dois campos de textbox e acionei as Threads. Quando a primeira thread acessa os textbox's ela coloca um dado EX: 1 e quando a segunda thead acessa os textbox's ela coloca outro valor Ex. 0.
Infelizmente apesar dos acessos serem em momentos diferentes mas sequencial (um acessa e depois o outro) estou com problemas para conseguir realizar o processo. Os problemas variam desde erro de acesso de objeto não criado na thead a não mostrar o valor. Bom abaixo segue o código, se alguem puder dar uma ajuda, ja estou a alguns dias em cima deste contexto.
Obrigado.
Fábio Petry
Curtir tópico
+ 0
Responder
Posts
08/09/2011
Ricardo Silva
Olá Fabio,
Está certo uma thread não pode acessar diretamente um Objeto a qual ela não enxergue, para isso você deverá utilizar os 'Delegates' ou então pode usar o 'MethodInvoker'.
1. if(textBox1.InvokeRequired) {2. textBox1.BeginInvoke((MethodInvoker)delegate {3. textBox1.Text = "0";4. });5. }
a Linha um verifica se a thread tem permissão de acessar o objeto textBox1;a lionha 2 cria um delegate invocado pelo objeto textBox1;a linha 3 muda o texto do objeto textBox1 de forma paralela a thread;
PS ao trabalhar com mais de uma Thread sugiro que leia sobre 'Semáfaro', 'Lock', etc
Está certo uma thread não pode acessar diretamente um Objeto a qual ela não enxergue, para isso você deverá utilizar os 'Delegates' ou então pode usar o 'MethodInvoker'.
1. if(textBox1.InvokeRequired) {2. textBox1.BeginInvoke((MethodInvoker)delegate {3. textBox1.Text = "0";4. });5. }
a Linha um verifica se a thread tem permissão de acessar o objeto textBox1;a lionha 2 cria um delegate invocado pelo objeto textBox1;a linha 3 muda o texto do objeto textBox1 de forma paralela a thread;
PS ao trabalhar com mais de uma Thread sugiro que leia sobre 'Semáfaro', 'Lock', etc
Responder
Clique aqui para fazer login e interagir na Comunidade :)