gpt4 book ai didi

c# - 控件和线程

转载 作者:太空宇宙 更新时间:2023-11-03 19:32:37 25 4
gpt4 key购买 nike

我有一个创建新线程的按钮。该线程包含以下内容。

foreach (DataRow r in results.Rows)
{
var item = new ResultItem(this)
{
Image = r[1].ToString(),
Video = r[2].ToString(),
Title = r[3].ToString().Trim(),
Duration = r[4].ToString().Trim()
};


SearchFlow.Controls.Add(item);
}

我收到此错误:在一个线程上创建的控件不能作为另一线程上控件的父级。 ResItem 是属于项目一部分的自定义用户控件,而不是第 3 方控件。有没有解决的办法?如何将此控件添加到新线程中的流表?

最佳答案

您只能在创建它们的线程上接触 UI 控件。这也意味着无法将后台线程创建的任何控件添加到您的 UI。

解决方案是仅使用 UI(前台)线程创建控件。

实现此目的的一种方法是在窗体上使用一个方法来创建您需要的控件,并让它检查它是否是前台线程。如果没有,它可以将自己编码到前台。这可以通过任何实现 ISyncronizeInvoke 的控件来完成。 .

private void Foo(object state)
{
if (this.InvokeRequired)
{
this.Invoke(Foo, state);
return;
}
// Do your creation of UI here...
}

请注意,此示例将阻塞后台线程,直到 UI 有时间处理该方法。

关于c# - 控件和线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4115598/

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