线程委托问题

zbking 2009-08-19 11:09:00

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace @delegate
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
dothd();
}

void str()
{
for (int i = 0; i < 200000; i++)
{
textBox1.Text = i.ToString();
//this.Refresh();
//Thread.Sleep(500);
}
}
delegate void tet();
void del()
{
this.Invoke(new tet(str));
}

void dothd()
{

Thread a = new Thread(del);
a.Start();
}
}
}


我发现void str()会阻塞主线程。启动是主窗体在循环做完前都不能操作。有什么办法让主窗体不被子线程阻塞。谢谢各位
...全文
126 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jsoner 2009-08-20
  • 打赏
  • 举报
回复
delegatevoid tet(string s);
void SetText(string s)
{
textBox1.Text= s;
}
void del()
{
for (int i=0; i <200000; i++)
{
if (this.InvokeRequired)
{
tet tt= new tet(SetText);
this.Invoke(tt, ,newobject[]{i.ToString()});
}
else
{
SetText(SetText)
}
}
}
void dothd()
{

Thread a=new Thread(del);
a.Start();
}
silver0 2009-08-20
  • 打赏
  • 举报
回复
同意2楼
[Quote=引用 2 楼 ttianqq 的回复:]
你的写法不对,在更新控件的时候再使用委托
C# codevoid str()
{
delegatevoid tet(string s);void SetText(string s)
{
textBox1.Text= s;
}
void del()
{
for (int i=0; i<200000; i++)
{
this.Invoke(new tet(SetText) ,newobject[]{i.ToString()}
}
}
void dothd()
{

Thread a=new Thread(del);
a.Start();
}
}
[/Quote]
yinrongg 2009-08-20
  • 打赏
  • 举报
回复
用begininvoke 试试
赵牧野 2009-08-19
  • 打赏
  • 举报
回复
mark
ttianqq 2009-08-19
  • 打赏
  • 举报
回复
不好意思,刚才的代码没有排版好
前面那个void str()
{
}
忘记删掉了
晒月光的青蛙 2009-08-19
  • 打赏
  • 举报
回复
这里的线程相当于没用,本来循环操作应该交给新线程做的,你这里还是主线程在运行循环,肯定要阻塞啊
ttianqq 2009-08-19
  • 打赏
  • 举报
回复
你的写法不对,在更新控件的时候再使用委托

void str()
{
}
delegate void tet(string s);
void SetText(string s)
{
textBox1.Text = s;
}
void del()
{
for (int i = 0; i < 200000; i++)
{
this.Invoke(new tet(SetText) , new object[]{i.ToString()}
}
}

void dothd()
{

Thread a = new Thread(del);
a.Start();
}

cc_net 2009-08-19
  • 打赏
  • 举报
回复
http://www.cnblogs.com/worldreason/archive/2008/06/09/1216127.html
看看吧

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧