[ IQooLogic @ 02.10.2008. 17:11 ] @
Hteo sam da napishem app koja cje da koristi BackgroundWorker i ponadao se da cje to da bude lakshe nego pisati multithread program.Program radi ono shto treba, nemam problema sa greshkama tipa Citat: Cross-thread operation not valid: Control '' accessed from a thread other than the thread it was created on. Sve radi kako treba ali program se ponasha kao da nije multithread i ako u pozadini navodno radi BackgroundWorker. ![]() Code: private void radioButton1_CheckedChanged(object sender, EventArgs e) { button1.Text = "Code Text"; } private void radioButton2_CheckedChanged(object sender, EventArgs e) { button1.Text = "DeCode Text"; } delegate void DoIt(); public void Work() { if (!richTextBox1.InvokeRequired) { Form1.ActiveForm.Text += " Working please wait ..."; string str = richTextBox1.Text; richTextBox1.Text = ""; CharEnumerator enu = str.GetEnumerator(); while (enu.MoveNext()) { if (radioButton1.Checked) { int c = (int)enu.Current + 13; richTextBox1.Text += String.Concat(Convert.ToChar(c)); richTextBox1.Refresh(); //richTextBox1.ScrollToCaret(); } else if (radioButton2.Checked) { int c = (int)enu.Current - 13; richTextBox1.Text += String.Concat(Convert.ToChar(c)); richTextBox1.Refresh(); //richTextBox1.ScrollToCaret(); } } } else { Invoke(new DoIt(Work)); } } private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { Work(); } private void button1_Click(object sender, EventArgs e) { backgroundWorker1.RunWorkerAsync(); } private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { Form1.ActiveForm.Text = "Enc13"; MessageBox.Show("Work completed !", "Enc13"); } Evo ga kod pa vidite ako shta nije u redu i gde greshim.Da pojasnim josh jednom, sve shto hocju je da kada recimo procesuira dug tekst da mogu program nesmetano da pomeram i da klikcjem dugmicje, shto u ovom gore kodu ne mogu ![]() |