Srodne teme
Kliknite za generisanje liste srodnih tema...
Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

BackgroundWorker C#

[es] :: .NET :: BackgroundWorker C#

[ Pregleda: 1993 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

IQooLogic
Milos Stojkovic
Software Developer
Srbija

Član broj: 110897
Poruke: 79
*.dynamic.sbb.rs.

ICQ: 324236803


+1 Profil

icon BackgroundWorker C#02.10.2008. u 17:11 - pre 189 meseci
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 Pomagajte
if(torrent == "free" && windows == true)
{
InstallOnComputer(Expensive_Software);
}
else goto Linux;
 
Odgovor na temu

DarkMan
Darko Matesic

Član broj: 20445
Poruke: 572
93.86.28.*

Jabber: DarkMan


Profil

icon Re: BackgroundWorker C#02.10.2008. u 17:28 - pre 189 meseci
Ako hoces da ti aplikacija reaguje na dogadjaje dok se neka zahtevna operacija odvija moras iz te operacije povremeno pozvati Application.DoEvents(). U tvom slucaju dodaj na kraju while petlje.
Pozivanje DoEvents metode usporava tvoju operaciju ali zato omogucava normalno odvojanje dogadjaja. Ako zelis da minimiziras usporenje pozivaj DoEvents, na primer, u svakom 10-tom prolazu petlje.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: BackgroundWorker C#02.10.2008. u 17:35 - pre 189 meseci
Pa ne radi ti kako hoces iz prostog razloga sto ti worker thread ni ne odradjuje cnode/decode posao. Kad thread udje u Work metod, prva provera (!richTextBox1.InvokeRequired) ce biti false, sto ce UVEK izazvati poziv Invoke(new DoIt(Work)); sto ce onda procesiranje Work metoda vratiti nazad u UI thread.

Mozda ti je bolje da primenis resenje koje ti Darkman predlozio nego da se zezas sa threadovima (pod uslovom da ti je jedini cilj to sto si naveo).
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

IQooLogic
Milos Stojkovic
Software Developer
Srbija

Član broj: 110897
Poruke: 79
*.dynamic.sbb.rs.

ICQ: 324236803


+1 Profil

icon Re: BackgroundWorker C#03.10.2008. u 20:13 - pre 189 meseci
Hvala za odgovor i da radi to shto sam zamislio sa DoEvents ali ipak mi je glavni cilj bio da se to reshi preko thread-a
if(torrent == "free" && windows == true)
{
InstallOnComputer(Expensive_Software);
}
else goto Linux;
 
Odgovor na temu

[es] :: .NET :: BackgroundWorker C#

[ Pregleda: 1993 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Srodne teme
Kliknite za generisanje liste srodnih tema...
Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.