积极答复者
c# 多线程

问题
-
我在winform 中用多线程,需要访问winform里的控件属性,用了Control.Invoke 这个方法,可是界面就不动了,就卡到那了,不是多线程吗?应该是界面正常啊,我切换一下界面就卡到那了
- 已移动 Sheng Jiang 蒋晟Moderator 2009年5月31日 18:50 Windows表单类库问题 ([Loc]From:Visual C#)
全部回复
-
private delegate void GetFileList();
private void button2_Click(object sender, EventArgs e)
{new Thread(Work).Start();}
public void Work()
{
while (true)
{
if (this.InvokeRequired)
{
GetFileList GetFL = new GetFileList(Work);
this.Invoke(GetFL);
}
else
{
progressBar1.Value = 0;
}
Thread.Sleep(10000);
}
}就是这样的,我让他等待,窗体就显示不出来了 -
这样试试:
private delegate void GetFileList();
private void button2_Click(object sender, EventArgs e)
{new Thread(Work).Start();}
public void Work()
{
while (true)
{
if (this.InvokeRequired)
{
GetFileList GetFL = new GetFileList(Work);
this.BeginInvoke(GetFL);
}
else
{
progressBar1.Value = 0;
}
Thread.Sleep(10000);
}
}
周雪峰 -
我是了,还是不行,界面还是显示不出来
你好对于你的代码
if (this.InvokeRequired)
这里的this.InvokeRequired始终为false的
这说明当前的线程是主线程,而不是你自己的线程
Thread.Sleep(10000);
就是将当前主线程Sleep10秒,这样当然会导致你的窗口绘制不出来
private delegate void GetFileList(); private delegate void DoSomething(); private void button2_Click(object sender, EventArgs e) { Thread.CurrentThread.Name = "mainThread"; Thread thread = new Thread(Work); thread.Name = "myThread"; thread.Start(); } private object obj = new object(); public void Work() { int i = 1; while (true) { if (IsHandleCreated) { if (this.InvokeRequired) { DoSomething doSomething = delegate() { this.Text = Thread.CurrentThread.Name; lock (obj) { if (this.progressBar1.Value < 100) { this.progressBar1.Value += 1; } } i++; }; this.BeginInvoke(doSomething); //GetFileList GetFL = new GetFileList(Work); //this.BeginInvoke(GetFL); } else { //progressBar1.Value = 0; //Thread.Sleep(10000); } if (i > 100) { break; } } }
努力着就不会放弃!.net技术交流群 33083877http://hi.baidu.com/1987raymond -
还是不行啊,.InvokeRequired也是始终为false的
请注意这里:
Thread.CurrentThread.Name = "mainThread";
Thread thread = new Thread(Work);
thread.Name = "myThread";
thread.Start();
我修改成这样就可以了,不晓得为什么,真是奇怪
new Thread(Work).Start();你的这个按理说是可以的
努力着就不会放弃!.net技术交流群 33083877http://hi.baidu.com/1987raymond -
还是为false 啊
我这里都是okay的啊
http://hi.baidu.com/1987raymond/album/item/8681980ff75ad3c8ab645791.html
你确认你是修改成我刚才那段代码了吗
努力着就不会放弃!.net技术交流群 33083877http://hi.baidu.com/1987raymond