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

Tsunamy_boy

backgroundWorker - erro a passar valores para controlos

5 mensagens neste tópico

Estou a usar o backgroundWorker para que a aplicação não bloqueie enquanto esta lé partes de um ficheiro o problema é que quando chamo um controlo qualquer e lhe tento atribuir um valor este dá erro:

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

A linha tem:

richTextBox1.Text += b.ToString() + " ";

como resolvo? cumps  :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hmm, como explicar isto...

Por questões de segurança, não é permitido uma thread aceder aos controlos criados por outra thread. Para contornar esse problema existe a propriedade InvokeRequired. Esta propriedade indica-te se este controlo pertence à thread ou não, que em caso negativo terás que invoquer indirectamente através de um delegate.

Mas como isto tudo é muito trabalhoso, junto com a framework é disponibilizado o BackgroundWorker. O BackgroundWorker já faz este trabalho todo por trás, não sendo necessário uma pessoa ter que se preocupar com estes pormenores. O facto de te estar a dar esse erro é porque estás a usa-lo erradamente. Sem ver o código não sei, mas muito provavelmente estás a aceder a um controlo (neste caso a richTextBox1) no evento DoWork, o que não deves fazer. Neste evento só deves ter processamento. Para interagires com os controlos tens à tua disponibilidade os eventos ProgressChanged e RunWorkerCompleted.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas tenho que por a mesma o meu processo dentro do dowork...

E se chamar uma função a parte este da erro dentro função.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tu não chamas uma função a parte. Tu dizes que fizeste progresso no processamento, ou seja, despoletas o evento ProgressChanged.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

crio o meu codigo dentro do ProgressChanged?? é isso?

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