wątek z parametrami

0

mam 45 textboxów i chcę je wypełnić.Z uwagi ,że to długo się robi pomyślałem żeby władować do wszystko do wątku.
Sprawy dwie.
a) i b).

TextBox[] TextBoxy = new TextBox[9];
private void UpdateButton_Click(object sender, EventArgs e)
        {
            Thread watek = new Thread(updatowanie); 
            watek.Start();
        }
        delegate void delegat(int i,int k );
        void updatowanie()
        {

                    if (TextBoxy[Convert.ToInt32(i)].InvokeRequired)
                    {
                        delegat dana = wpiszdotextbox;
                        Invoke(dana, i, k);
                    }
                    else
                        TextBoxy[Convert.ToInt32(i)].Text = ZrobUbdate.UpdateCeny(mineraly[Convert.ToInt32(i)], systemy[Convert.ToInt32(k)]).ToString();

        }
        void wpiszdotextbox(int i , int k)
        {
            TextBox[] TextBoxyHek = new TextBox[9] { textboxTritanium, textBoxPyerite, textBoxMexallon, textBoxIsogen, textBoxNocxium, textBoxZydrine, textBoxMegacyte, textBoxMorphite, textBoxHydrogen };
            TextBox[] TextBoxyJita = new TextBox[9] { JitatextBoxTrit, JitatextBoxPyerite, JitatextBoxMexallon, JitatextBoxIsogen, JitatextBoxNocxium, JitatextBoxZydrine, JitatextBoxMegacyte, JitatextBoxMorphite, JitatextBoxHydro };
            TextBox[] TextBoxyAmarr = new TextBox[9] { AmarrtextBoxTrit, AmarrtextBoxPyerite, AmarrtextBoxMexallon, AmarrtextBoxIsogen, AmarrtextBoxNocxium, AmarrtextBoxZydrine, AmarrtextBoxMegacyte, AmarrtextBoxMorphite, AmarrtextBoxHydro };
            TextBox[] TextBoxyRens = new TextBox[9] { RenstextBoxTrit, RenstextBoxPyerite, RenstextBoxMexallon, RenstextBoxIsogen, RenstextBoxNocxium, RenstextBoxZydrine, RenstextBoxMegacyte, RenstextBoxMorphite, RenstextBoxHydro };
            TextBox[] TextBoxyDodixie = new TextBox[9] { DodixietextBoxTrit, DodixietextBoxPyerite, DodixietextBoxMexallon, DodixietextBoxIsogen, DodixietextBoxNocxium, DodixietextBoxZydrine, DodixietextBoxMegacyte, DodixietextBoxMorphite, DodixietextBoxHydro };

                if (k == 0)
                    TextBoxy = TextBoxyHek;
                if (k == 1)
                    TextBoxy = TextBoxyJita;
                if (k == 2)
                    TextBoxy = TextBoxyAmarr;
                if (k == 3)
                    TextBoxy = TextBoxyRens;
                if (k == 4)
                    TextBoxy = TextBoxyDodixie;
                TextBoxy[Convert.ToInt32(i)].Text = ZrobUbdate.UpdateCeny(mineraly[Convert.ToInt32(i)], systemy[Convert.ToInt32(k)]).ToString();

        }

a) Thread watek = new Thread(updatowanie); potrzebuje parametrów. Nie wiem jak to napisać....
b) próbowałem pokombinować ...umieściłem w kolejnych "for" invokeRequired i miałem błąd:
Object reference not set to an instance of object.
Może macie pomysł jak to załatwić?:)

0

http://stackoverflow.com/ques[...]-threadstart-method-in-thread

Ten kod jest nieczytelny kompletnie, to powinno być w pętli http://pl.wikipedia.org/wiki/DRY

0

Z uwagi ,że to długo się robi pomyślałem żeby władować do wszystko do wątku.
Nie wydaje mi się, aby twój kod działał cokolwiek szybciej niż bez kombinowania z wątkami.
Przecież całą robotę wątka wrzucasz do Invoke, które uruchamia podany kod w wątku głównym.
Dodajesz tylko narzut zbędnych operacji tworzenia wątka i Invoke, a i tak wszystko działa tak samo jak w programie jednowątkowym.

0

No nie działa jak powinien.Sugeruję się informacjami z neta....nie wychodzi to najlepiej.

0

Dzięki za odpowiedzi , popracowałem trochę nad tym i udało mi się rozwiązać. Działa jak powinno:

private void UpdateButton_Click(object sender, EventArgs e)
        {

            Thread watek = new Thread(updatowanie);
            watek.Start();

        }

        void updatowanie()
        {
            for (int i = 0; i < 9; i++)
            {
                for (int k = 0; k < 5; k++)
                {
                    zmiennadoupdate = Convert.ToDouble(ZrobUbdate.UpdateCeny(mineraly[Convert.ToInt32(i)], systemy[Convert.ToInt32(k)]));

                    Invoke((MethodInvoker)delegate
                    {
                        wpiszdotextbox(i,k);
                    });
                }
            }

        }
        void wpiszdotextbox(object i, object k)
        {
            TextBox[] TextBoxyHek = new TextBox[9] { textboxTritanium, textBoxPyerite, textBoxMexallon, textBoxIsogen, textBoxNocxium, textBoxZydrine, textBoxMegacyte, textBoxMorphite, textBoxHydrogen };
            TextBox[] TextBoxyJita = new TextBox[9] { JitatextBoxTrit, JitatextBoxPyerite, JitatextBoxMexallon, JitatextBoxIsogen, JitatextBoxNocxium, JitatextBoxZydrine, JitatextBoxMegacyte, JitatextBoxMorphite, JitatextBoxHydro };
            TextBox[] TextBoxyAmarr = new TextBox[9] { AmarrtextBoxTrit, AmarrtextBoxPyerite, AmarrtextBoxMexallon, AmarrtextBoxIsogen, AmarrtextBoxNocxium, AmarrtextBoxZydrine, AmarrtextBoxMegacyte, AmarrtextBoxMorphite, AmarrtextBoxHydro };
            TextBox[] TextBoxyRens = new TextBox[9] { RenstextBoxTrit, RenstextBoxPyerite, RenstextBoxMexallon, RenstextBoxIsogen, RenstextBoxNocxium, RenstextBoxZydrine, RenstextBoxMegacyte, RenstextBoxMorphite, RenstextBoxHydro };
            TextBox[] TextBoxyDodixie = new TextBox[9] { DodixietextBoxTrit, DodixietextBoxPyerite, DodixietextBoxMexallon, DodixietextBoxIsogen, DodixietextBoxNocxium, DodixietextBoxZydrine, DodixietextBoxMegacyte, DodixietextBoxMorphite, DodixietextBoxHydro };

                if (Convert.ToInt32(k) == 0)
                    TextBoxy = TextBoxyHek;
                if (Convert.ToInt32(k) == 1)
                    TextBoxy = TextBoxyJita;
                if (Convert.ToInt32(k) == 2)
                    TextBoxy = TextBoxyAmarr;
                if (Convert.ToInt32(k) == 3)
                    TextBoxy = TextBoxyRens;
                if (Convert.ToInt32(k) == 4)
                    TextBoxy = TextBoxyDodixie;
                TextBoxy[Convert.ToInt32(i)].Text = zmiennadoupdate.ToString();

        }

    }

Umieszczam dla pozostałych zabłąkanych.
Temat do zamknięcia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0