在自己创建的Thread当中Sleep,发现会让主线程也卡住,为什么?

qweroio qweroio 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我在一个winform的main函数中,自己创建了一个线程。这个线程先睡16秒,然后通过BeginInvoke去修改textBox1.Text。代码如下所示:

public partial class Form1 : Form
{
public delegate void InvokeDelegate();
private void Invoke_Click(object sender)
{
textBox1.BeginInvoke(new InvokeDelegate(InvokeMethod));
}
public void InvokeMethod()
{
Thread.Sleep(16000);
textBox1.Text = "Executed the given delegate";
}

public Form1()
{
InitializeComponent();
var thread = new Thread(new ParameterizedThreadStart(Invoke_Click), 2048000);
thread.Start();
}
}

我期待的结果是,主界面启动以后,所有控件都能显示。过了16秒,textBox1控件中的内容变成"Executed the given delegate"
但是实际的结果是
(1)程序启动以后变成左边的样子,一直没有响应长达16秒,界面上什么文字都显示不出来。如左图
(2)16秒以后变成右图的模样。

为什么不合我的预期呢,我对Thread/BeginInvoke的理解都不对吗?
...全文

相关推荐

评论 6
收藏 已收藏
分享
返回顶部
qweroio
C# 111,129 成员 642,538 内容