Witam, od pewnego czasu ucze się C#, rozwijam swój projekt lecz nie moge dojść do ładu z wątkami, mam program w którym klikając na przycisk chciałbym wczytywać zdjęcie(obrazek) a jednocześnie chciałbym żeby pasek postępu się zmieniał, czytałem czytałem... oto kod który wyskrobałem:

deklaracje....

        private Thread trd;

        private delegate void SetMinimumProgressBar(int _value);
        private delegate void SetMaximumProgressBar(int _value);
        private delegate void SetStepsProgressBar(int _value);
        private delegate void SetPerformStepProgressBar();
        private delegate void SetValueProgressBar(int _value);

        private delegate void OpenImagePictureBox(PictureBox _pictureBox, String _str);
        private delegate void SetVisablePictureBoxYes(PictureBox _pictureBox);
        private delegate void SetVisablePictureBoxNo(PictureBox _pictureBox);

no tutaj jakieś metody

  private void MethodSetMinimumProgressBar(int _value)
        {
            progresBar.Minimum = _value;
        }
        private void MethodSetMaximumProgressBar(int _value)
        {
            progresBar.Maximum = _value;
        }
...
...
... itd

samo wywołanie(utworzenie) nowego wątku

Thread trd = new Thread(new ThreadStart(load_Image));
                    trd.IsBackground = true;
                    trd.Start();

no i metoda która się ma wykonać

private void load_Image()
        {
            try
            {
                OpenFileDialog open = new OpenFileDialog();

                open.Filter = "Image Files(*.jpg; *.jpeg; *.gif; *.bmp)|*.jpg; *.jpeg; *.gif; *.bmp";


                
                progresBar.Invoke(new SetMinimumProgressBar(MethodSetMinimumProgressBar), 0);
                progresBar.Invoke(new SetMaximumProgressBar(MethodSetMaximumProgressBar), 3);
                progresBar.Invoke(new SetStepsProgressBar(MethodSetStepsProgressBar), 1);
                SetPerformStepProgressBar _SetPerformStepProgressBar = new SetPerformStepProgressBar(MethodSetPerformStepProgressBar);
               
                
                if (open.ShowDialog() == DialogResult.OK)
                {
                    statusBar.Invoke(new SetTextStatusBarPanel(MethodSetTextStatusBarPanel),statusBarPanel1, "Loading Image");
                    pictureBox1.Invoke(new OpenImagePictureBox(MethodOpenImagePictureBox),pictureBox1, open.FileName);
                    pictureBox1.Invoke(new SetVisablePictureBoxYes(MethodSetVisablePictureBoxYes), pictureBox1);
                    _SetPerformStepProgressBar();
                    pictureBox2.Invoke(new OpenImagePictureBox(MethodOpenImagePictureBox), pictureBox2, open.FileName);
                    _SetPerformStepProgressBar();
                    pictureBox2.Invoke(new SetVisablePictureBoxYes(MethodSetVisablePictureBoxYes), pictureBox2);
                    pictureBox3.Invoke(new OpenImagePictureBox(MethodOpenImagePictureBox), pictureBox3, open.FileName);
                    _SetPerformStepProgressBar();
                    pictureBox3.Invoke(new SetVisablePictureBoxYes(MethodSetVisablePictureBoxYes), pictureBox3);
                    statusBar.Invoke(new SetTextStatusBarPanel(MethodSetTextStatusBarPanel), statusBarPanel1, "Press F1 for Help");
                    progresBar.Invoke(new SetValueProgressBar(MethodSetValueProgressBar),0);
                    tc.Invoke(new SetSelectedIndexTabControl(MethodSetSelectedIndexTabControl), 0);
                }
            }
            catch (Exception e)
            {
                Console.Write("" + e.Message);

            }
        }

przed main jest oczywiście....

        [STAThread]
        public static void Main()
        {
            Class1 form = new Class1();
            Application.Run();
        }

a dalej wyskakuje mi komunikat:

the Current thread must be set to single thread apartment (STA) mode before 
OLE calls can be made. Ensure that your Main function has STAThreadAttribute 
marked on it. This exception is only raised if a debugger is attached to the 
process