当前位置:  开发笔记 > 编程语言 > 正文

控件和线程

如何解决《控件和线程》经验,为你挑选了1个好方法。

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

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是自定义用户控件,它是项目的一部分,而不是第三方控件.有没有解决的办法?如何将此控件添加到新线程中的流表?



1> davisoa..:

您只能触摸创建它们的线程上的UI控件.这也意味着后台线程创建的任何控件都无法添加到UI中.

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

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

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

请注意,此示例将阻止后台线程,直到UI有一些时间来处理该方法.

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有