| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 367 人关注过本帖
标题:线程访问控件问题
只看楼主 加入收藏
pegasus827
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-9-23
结帖率:0
收藏
 问题点数:0 回复次数:0 
线程访问控件问题
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里,调用控件时才会出问题,学习了用事件来解决的办法。 但如果线程函数就是写在主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); 委托自己
搜索更多相关主题的帖子: void private public 
2012-04-12 08:29
快速回复:线程访问控件问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025151 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved