Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [C#] Problema Thread su Lettura file Background Worker
Forum - C# / VB.NET - [C#] Problema Thread su Lettura file Background Worker

Avatar
Thejuster (Member)
Guru^2


Messaggi: 1879
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 10:12
Sabato, 27/02/2010
Questo topic è stato chiuso dal moderatore

Salve,

Ho un problema sul BackGround Worker.

il mio programmino deve decriptare un file abbastanza lungo quindi ci impiegerà un pò di tempo per fare questo sopratutto perche i file sono gradi circa da 1mb a 5mb di testo.

il problema sta qui.
una volta che il background worker mi ha decriptato tutto il file
non riesco a recuperare il contenuto e metterlo in un'altra richtextbox

mostro l'esempio

Codice sorgente - presumibilmente C#

  1. RichTextBox rtb = new RichTextBox();
  2.         private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
  3.         {
  4.             using (StreamReader sr = new StreamReader(textBox3.Text))
  5.             {
  6.                 string line;
  7.                
  8.                 while ((line = sr.ReadLine()) != null)
  9.                 {
  10.                     string ln = EncodeDecode.DeCrypt(line);
  11.                     rtb.AppendText(ln + "\n");
  12.                     linecount++;
  13.                 }
  14.  
  15.             }
  16.         }
  17.  
  18.  
  19.   private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
  20.         {
  21.             MessageBox.Show("Lettura Completa");
  22.             incolla();
  23.         }
  24.  
  25.  
  26.    private void incolla()
  27.         {
  28.             richTextBox1.Text = rtb.Text;  //dopo quest'operazione mi dà errore.
  29.         }



dopo l'operazione ecco l'errore scaturito dal programma


Eccezione generata dalla destinazione di una chiamata.


InnerException:
{"Operazione cross-thread non valida: è stato eseguito l'accesso al controllo '' da un thread diverso da quello da cui è stata eseguita la creazione."}


ho appunto evitato di far succedere questo errore
inserendo un nuovo controllo "rtb"
facendolo manipolare dal backgroundworker
e una volta finito ho reindirizzato l'applicazione a recuperare il contenuto.

poi ho provato a farlo separatamente
cioè a recuperare il contenuto di rtb dopo che il processo e finito e cliccando manualmente sul pulsante per recuperarlo e mi da sempre quell'errore


Operazione cross-thread non valida: è stato eseguito l'accesso al controllo '' da un thread diverso da quello da cui è stata eseguita la creazione.


Qualche idea?

Ultima modifica effettuata da Thejuster il 27/02/2010 alle 10:14


PM
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5704
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 10:44
Sabato, 27/02/2010
Testo quotato

Postato originariamente da Thejuster:

Qualche idea?



Penso che sia uno degli argomenti tra i più dibattuti su internet ... esistono tonnellate di richieste, discussioni, soluzioni ...

Comincia a documentarti dalla "fonte" (Microsoft) a partire dal paragrafo

"Making Thread-Safe Calls by using BackgroundWorker"

in

http://msdn.microsoft.com/en-us/library/ms171728.aspx

Ultima modifica effettuata da nessuno il 27/02/2010 alle 10:45


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM
Avatar
Thejuster (Member)
Guru^2


Messaggi: 1879
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 11:42
Sabato, 27/02/2010
ho risolto diversamente.

siccome i controlli sono nell heap e non nello stack mi dà questo problema.
mi e bastato usare stringbuilder per avere accesso alla variabile ed utilizzarlo
proprio come se fosse un textbox ;)

grazie di tutto saluti.


PM