【问题标题】:C# WM6 Compact Framework Cross Thread Communication ProblemC# WM6 Compact Framework 跨线程通信问题
【发布时间】:2009-06-19 08:41:49
【问题描述】:

我在从使用

创建的线程更新我的 ui 上的控件时遇到问题
ThreadPool.QueueUserWorkItem

在这个线程中我正在调用

addControlToPanel(li);

如图所示

private delegate void addControlToPanelDelegate(ListItem li);
private void addControlToPanel(ListItem li)
{
    if (panel1.InvokeRequired)
    {
        addControlToPanelDelegate d = new addControlToPanelDelegate(addControlToPanel);
        panel1.Invoke(d, new object[] { li });
    }
    else
    {
        panel1.Controls.Add(li);
    }
}

第一次进入 addControlToPanel() panel1.InvokeRequired == true 所以一个委托被实例化然后被调用,现在这个进入 addControlToPanel(), panel1.InvokeRequired == false 所以我将控件添加到面板。

我的问题是,即使在针对控件和 panel1.InvokeRequired 为 false 调用之后,我也会在

上收到错误
panel1.Controls.Add(li); 

说明通常的行

Control.Invoke 必须用于与在单独线程上创建的控件进行交互。

有人能发现问题吗?使用调用来访问另一个线程上的控件是我以前做过很多次的事情,但这一次让我难过!

TIA

单次

【问题讨论】:

    标签: c# .net multithreading windows-mobile-6


    【解决方案1】:

    问题似乎是在调用时传递了一个控件(ListItem 是我创建的一个表单控件),而不是我重构了代码,而不是创建控件并将其传递给

    addControlToPanel()
    

    方法,我在调用后传递了在方法内部创建控件所需的所有信息

    private delegate void addControlToPanelDelegate(string picname, string thumburl, PicasaEntry entry, Int32 top, EventHandler clickevent);
    private void addControlToPanel(string picname, string thumburl, PicasaEntry entry, Int32 Ordinal,EventHandler clickevent)
    {
        if (panel1.InvokeRequired)
        {
            addControlToPanelDelegate d = new addControlToPanelDelegate(addControlToPanel);
            this.Invoke(d, new object[] { picname, thumburl, entry, Ordinal, clickevent });
            //panel1.Invoke(d, new object[] { li });
        }
        else
        {
            ListItem li = new ListItem(picname, thumburl, entry);
            li.Top = Ordinal * li.Height;
            li.Click += clickevent;
            panel1.Controls.Add( li);
        }
    }
    

    干杯

    单次

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-05
      • 2017-11-15
      • 2011-12-18
      • 1970-01-01
      • 1970-01-01
      • 2021-09-15
      • 1970-01-01
      相关资源
      最近更新 更多