永发信息网

C#问题,运行界面卡死,代码如下,请大神教教

答案:3  悬赏:50  手机版
解决时间 2021-04-12 15:18
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Thread t = new Thread(time);
t.Start();
}
public delegate void timeDelegate();

int timeLeft = 30;

private void time()
{

if (label1.InvokeRequired)
{
timeDelegate d = time;
label1.Invoke(d);
}
else
{
while (timeLeft >= 0)
{
label1.Text = "Time:" + timeLeft + "s";
timeLeft--;
Thread.Sleep(1000);
}
}
}
}
最佳答案
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Thread t = new Thread(time);
t.IsBackground = true; //改为后台线程,是防关闭出错
t.Start();
}

public delegate void timeDelegate();
int timeLeft = 30;

private void time()
{ //不要将sleep委托进UI线程,只委托一句代码就好
timeDelegate myDelegate = ()=>label1.Text = "Time:" + timeLeft + "s";;
while (timeLeft >= 0)
{
label1.Invoke(myDelegate);
timeLeft--;
Thread.Sleep(1000);
}
}
}
//发现和linsloony 答案是一样的, 只是我用lambda简化了
全部回答
卡死原因是你在窗体线程上连续调用了Thread.Sleep(1000)约31次; 程序是这样运行的: 0、假设窗体所在线程ID为6; 1、 t.Start();后,线程执行time()方法,假设此线程ID为7; 2、因为线程ID不一样,if (label1.InvokeRequired)的条件成立; 3、通过label1.Invoke(d);请求在label的创建线程也就是ID为6的线程中执行方法d,而d指向time(); 4、在ID为6的线程中执行time(),if (label1.InvokeRequired)的条件不成立; 5、在ID为6的线程中执行while循环,此时的Thread.Sleep()的线程ID为6,也即窗体所在线程! 请参考修改: private void time() { while (timeLeft >= 0) { ShowTimes(); timeLeft--; Thread.Sleep(1000); } } void ShowTimes() { if (this.InvokeRequired) { timeDelegate d = ShowTimes; label1.Invoke(d); } else { label1.Text = "Time:" + timeLeft + "s"; } } 欢迎追问。
卡死原因是你在窗体线程上连续调用了Thread.Sleep(1000)约31次; 程序是这样运行的: 0、假设窗体所在线程ID为6; 1、 t.Start();后,线程执行time()方法,假设此线程ID为7; 2、因为线程ID不一样,if (label1.InvokeRequired)的条件成立; 3、通过label1.Invoke(d);请求在label的创建线程也就是ID为6的线程中执行方法d,而d指向time(); 4、在ID为6的线程中执行time(),if (label1.InvokeRequired)的条件不成立; 5、在ID为6的线程中执行while循环,此时的Thread.Sleep()的线程ID为6,也即窗体所在线程!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
天书奇谈的天书有啥用??
怎样瘦大腿和肚子最有效
为什么喜欢篮球?
中国轴承流通1号店太原旗舰店我想知道这个在
看图作文在怎样讲才有趣
梦幻西游JP高速皇帝WZ孩子计划,急用,高手请
清玛特韩国商品连锁超市总店这个地址在什么地
could you tell me? Yes. Walk on, you can f
free hug是什麽意思?
我是男的,很瘦,胸部哪全都是骨头,听说健身
安庆师范学院龙山校区文学院宿舍
杀毒软件NOD32
描写夜晚凄凉的句子,描写夜色凄凉的好句好段
起诉污陷该怎么走法律程序
请问考研考中文系应该看些什么书?
推荐资讯
含有骤字的成语
律师和注册会计师哪个更累?说说原因。
用过的胸罩还新的太小了怎么处理?
常州哪里有卖低筋面粉?
京东账户余额提现多久,京东余额怎么提现到银
星球大战原力释放终极版如何安装啊
阜宁有多少人口,盐城特产有哪些
甲从一个鱼摊上买了3条鱼,平均每条a元,又从另
关于苏军头盔的问题
国静汽车音响飞歌导航地址在哪,我要去那里办
西南大学怎么样?什么专业比较好。我是女生,
欧尚广州真皮女鞋地址在哪,我要去那里办事
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?