搞定了,用委托的方法可以解决这个问题,这个while(true)就是要让线程持续监控问题解决的方法;using System; using System.Windows.Forms;namespace win1 { public partial class Form1 : Form { public delegate void 我的委托();//声明一个委托 public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e)//此处先双击button1以便产生代码并且自动创建事件委托 { new System.Threading.Thread(new System.Threading.ThreadStart (新线程)).Start();//创建一个新的线程并启动
} public void 设置文字() { button1.Text = "Hello"; } public void 新线程() { System.Threading.Thread.Sleep(2000);//线程休眠2秒 button1.BeginInvoke(new 我的委托(设置文字));//在button1所在线程上执行“设置文字” } } }
使用委托
InvokeRequired
public void Add(string s)
{
if (listBox1.InvokeRequired)
{
AddString a= new AddString(Add);
listBox1.Invoke(a, new object[] { s});
}
else
{
listBox1.Items.Add(s);
}
}
建议将true改为一变量,这样可以在其他地方随意控制监听的启动和关闭
using System.Windows.Forms;namespace win1
{
public partial class Form1 : Form
{
public delegate void 我的委托();//声明一个委托
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)//此处先双击button1以便产生代码并且自动创建事件委托
{
new System.Threading.Thread(new System.Threading.ThreadStart (新线程)).Start();//创建一个新的线程并启动
}
public void 设置文字()
{
button1.Text = "Hello";
} public void 新线程()
{
System.Threading.Thread.Sleep(2000);//线程休眠2秒
button1.BeginInvoke(new 我的委托(设置文字));//在button1所在线程上执行“设置文字”
}
}
}