gpt4 book ai didi

c# - 什么时候允许跨线程访问,什么时候不允许?

转载 作者:行者123 更新时间:2023-12-03 12:49:15 25 4
gpt4 key购买 nike

C# 似乎有时会抛出跨线程操作异常。例如,您可以尝试在 Windows 窗体程序中运行此示例代码:

    public Form1()
{
InitializeComponent();
Thread setTextT = new Thread(TextSetter);
setTextT.Start();
}

private void TextSetter()
{
//Thread.Sleep(4000);
textBox1.Text = "Hello World";
}

它没有抛出任何异常,一切似乎都工作正常。现在,当您取消注释 Thread.Sleep 行时,它将针对尝试的跨线程访问抛出异常。

为什么会这样?

最佳答案

这是因为跨线程检查仅发生在the window's handle之后已经创建,因为您要检查的是窗口句柄的跨线程访问。当您没有 sleep 时,代码在第一次显示控件之前运行得足够快(第一次显示控件时创建句柄)。

了解是否需要小心 UI 控件的跨线程访问的最简单方法是检查 InvokeRequired如果属实,您需要调用 Invoke (或者BeginInvoke,如果您不想等待它完成)进入创建控件的线程。

关于c# - 什么时候允许跨线程访问,什么时候不允许?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20170462/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com