Progressbar/loading data i watki

0

Witam mam taki oto kod:

 
private void otworzKatalogToolStripMenuItem_Click(object sender, EventArgs e)
        {

            List<string> path = new List<string>();
            string[] extension;
            string folder;

            this.formcheck = new ModalExtensionChooseForm();
            this.formcheck.ShowDialog();

            if (this.formcheck.DialogResult == DialogResult.OK)
            {
                extension = this.formcheck.extension.ToArray();
                this.folderBrowserDialog1 = new System.Windows.Forms.FolderBrowserDialog();
                this.folderBrowserDialog1.ShowNewFolderButton = false;
                this.folderBrowserDialog1.RootFolder = System.Environment.SpecialFolder.MyComputer;
                DialogResult result = this.folderBrowserDialog1.ShowDialog();
                folder = folderBrowserDialog1.SelectedPath;

                if (result == DialogResult.OK)
                {
                    foreach (string ext in extension)
                    {
                        foreach (string file in System.IO.Directory.GetFiles(folder, ext))
                        {
                            path.Add(file);
                        }
                    }

                    int PictX = 10;
                    int PictY = 50;
                    int CheckX = 10;
                    int CheckY = 30;
                    int thumbX = 150;
                    int thumbY = 150;
                    float elementForRows = this.Width / thumbX;
                    elementForRows = Convert.ToInt32(Math.Round(elementForRows));

                    for (int i = 0; i < path.Count; i++)
                    {
                        string prevImage, nextImage;

                        ////////
                        //tutaj chcialbym miec okno z progressbar'em lub napisem
                        ///////

                        if ((i + 1) < path.Count)
                            nextImage = path[i + 1];
                        else
                            nextImage = path[0];

                        if ((i - 1) > 0)
                            prevImage = path[i - 1];
                        else
                            prevImage = path[path.Count - 1];

                        PictureBox pictureBox = new PictureBox();
                        CheckBox checkbox = new CheckBox();
                        checkbox.BackColor = System.Drawing.SystemColors.GradientInactiveCaption;
                        checkbox.Location = new System.Drawing.Point(CheckX, CheckY);
                        checkbox.Size = new System.Drawing.Size(thumbX, 20);
                        checkbox.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
                        checkbox.Text = "Usun obraz";
                        checkbox.Tag = Convert.ToString(path[i]);
                        checkbox.CheckedChanged += new EventHandler(checkbox_CheckedChanged);
                        pictureBox.Cursor = System.Windows.Forms.Cursors.Hand;
                        pictureBox.Location = new System.Drawing.Point(PictX, PictY);
                        pictureBox.SizeMode = PictureBoxSizeMode.StretchImage;
                        pictureBox.Size = new System.Drawing.Size(thumbX, thumbY);

                        pictureBox.Tag = path[i].ToString() + ";" + prevImage + ";" + nextImage;

                        using (System.IO.FileStream fs = new System.IO.FileStream(path[i].ToString(), System.IO.FileMode.Open, System.IO.FileAccess.Read))
                        {
                            pictureBox.Image = System.Drawing.Image.FromStream(fs);
                        }

                        pictureBox.Click += new EventHandler(this.pictureBox_Click);
                        this.Controls.Add(pictureBox);
                        this.Controls.Add(checkbox);

                        if ((i + 1) % elementForRows == 0)
                        {
                            PictX = 10;
                            PictY += 180;
                            CheckX = 10;
                            CheckY += 180;
                        }

                        else
                        {
                            PictX += 160;
                            CheckX += 160;
                        }
                    }
                }

                this.formcheck.Dispose();
            }
        }

Chcialbym zeby w momencie wczytywania zdjec pojawilo mi sie okno modalne lub nie z progressbar'em lub napisem ze wczytuje zdjecie i jak tylko wczytywanie zdjec sie zakonczy to te okno ma zniknac...zaden problem...nie chce uzywam backgroundworker'a, chce sie nauczyc korzystac z watkow w C#...
Problem polega na tym ze nie wiem jak spowodowac by wiedziec kiedy wczytywanie zdjec sie zakonczy i wtedy wstrzymac watek za pomoca:

watek.Abort(); 

Albo po prostu sprawdzic czy iterator czyli zmienna "i" z petli for doszla juz do wczytywania ostatnie zdj czyli if(i == (path.count - 1)) i potem zatrzymac watek...

Czy ktos moze mi zrobic prosty zarys jak to powinno wygladac?

0

Scenariuszy może być wiele. Np. taki:
Klasa wykonująca pracę w osobnym wątku w odpowiednich momentach rzuca event'y, które ktoś może złapać, np. twoje okienko informacyjne i odpowiednio na nie zareagować. Eventy: PoczatekPracy, KolejnyKrok, KoniecPracy. To klasa wykonującą pracę powinna wiedzieć kiedy musi sobie odpalić nowy wątek i kiedy go zamknąć, dla warstwy prezentacji powinno to być przezroczyste.

0

Nie powinno wywoływać się metody Abort. To wątek ma wiedzieć kiedy się zakończyć (wtedy kiedy skończył pracę). Jeśli chcesz przerwać wątek w trakcie pracy, to musisz go powiadomić o tym że ma przerwać pracę (są mechanizmy do tego). Metoda Abort to ostateczność - ubicie wątku na siłę.

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