Chả là thế này. Em đang lập trình một dự án, sử dụng Thread.
Em làm một lớp SqlThread, trong lớp này có các phương thức làm việc với SQL.
Khi trong các phương thức đó xuất hiện các lỗi (Exception) thì sẽ gọi một hàm ở trong một lớp tĩnh MyTools.Error (chẳng hạn thế)
ở trong pt Error đó sẽ tạo mới ra một form Notice.
trong Notice có một hàm tạo ra một Thread con, Thread con này có nhiệm vụ thay đổi Opacity của Notice, nhưng mà tại sao Opacity của Notice không hề thay đổi mà vẫn chỉ giữ giá trị ban đầu?
Khi bỏ 1 trong 2 nội dung của SqlThread hoặc Notice ra ngoài khỏi Thread thì chạy bình thường.

Code:
SqlThread{
... Some thing here
            void for Thread
            {
                try
                {
                   ... Some thing here
                }
                catch (Exception e) { Error(e); }
            }
... Some thing here
}

Notice{
...
               void abc de thay doi Opacity
               {
               for(int i = 0; i <= 80; i++)
                {
                    ChangeOpacity(((double)i)/100d);
                    Thread.Sleep(10);
                }
                Thread.Sleep(_showtime);
                for (int i = (int)(this.Opacity * 100); i > 0; i--)
                {
                    ChangeOpacity(((double)i) / 100d);
                    Thread.Sleep(10);
                }
                CloseThis();
               }
...
        private void ChangeOpacity(double value)
        {
            if (this.InvokeRequired)
            {
                this.Invoke(new dlgDouble(ChangeOpacity), new object[] { value });
            }
            else
            {
                this.Opacity = value;
                this.Refresh();
            }
        }
...
}