关于网上线程访问控件教程的疑问
public partial class Form1 : Form
   {
   Thread mythread1;
   public Form1()
   {
   InitializeComponent();
   mythread1= new Thread(new ThreadStart(mymethod));
   mythread1.IsBackground = true;    
   mythread1.Start();
   mythread1.Suspend();
   }
   private void button1_Click(object sender, EventArgs e)
   {
   // if (mythread1.IsBackground == true&&mythread1.ThreadState == ThreadState.Suspended)
   if (mythread1.ThreadState == (ThreadState.Background | ThreadState.Suspended))
   mythread1.Resume();
   }
   private void mymethod()
   {
   while (true)
   {
   label1.Text = DateTime.Now.ToString();
   Thread.Sleep(1000);
   }
   }
   }
问题一:  看很多教程都说子线程函数不能直接使用主窗口的控件,可我按他们的思路大致写了一个,运行很正常也没报错,我.net应该是2.0标准以上的。   我觉得除非线程函数没写在主Form里,调用控件时才会出问题,昨天得mngzilin教诲,学习了用事件来解决的办法。 但如果线程函数就是写在主Form类里,我用了没出什么问题,网上很多教程为什么都说会报错呢。
问题二: 网上说针对控件不能访问的情况
给出得解决办法
public delegate void MyInvoke(string str);
private void button9_Click(object sender, EventArgs e)
   {
   //_myInvoke = new MyInvoke(SetText);
   //CheckForIllegalCrossThreadCalls = false;
   Thread t = new Thread(new ThreadStart(fun));
   t.Start();
   }
   private void fun()
   {
   //_myInvoke("dddd");
   SetText("ddd");
   }
   private void SetText(string s)
   {
   if (textBox6.InvokeRequired)
   {
   MyInvoke _myInvoke = new MyInvoke(SetText);
   this.Invoke(_myInvoke, new object[] { s });
   }
   else
   {
   this.textBox6.Text = s;
   }
   }
很多教程也这么写,可我怎么就看不明白SetText里if else 这是瞎折腾什么呢这是,还MyInvoke _myInvoke = new MyInvoke(SetText); 委托自己
------解决方案--------------------
不报错,你把构造函数中的mythread1.Suspend();去掉试试
InvokeRequired表示调用方位于创建控件所在的线程以外的线程中。