代码之家  ›  专栏  ›  技术社区  ›  Tom Wright

哪个C程序集包含invoke?

  •  5
  • Tom Wright  · 技术社区  · 15 年前

    另一个问题:为什么vs10如此热衷于抱怨invoke?

    在我不断追求 使我的应用程序工作 成为世界上最好的C程序员,我已经决定线程是一件好事

    msdn有一篇关于制作 thread-safe calls to controls 但它(似乎是关于主题的其他每一篇文章)斜引用了一个名为invoke的方法。有时甚至会发生意外, I've read is to be preferred .

    如果我能让Visual Studio识别invoke,所有这些都会很好。MSDN说 it is contained in the System.Windows.Forms assembly 但我已经在使用它了。当然,我也尝试过使用System.Threading,但是没有用。

    我需要通过什么环才能让invoke工作?

    6 回复  |  直到 15 年前
        1
  •  4
  •   Community CDub    8 年前

    Invoke 在控制范围内。即。 Control.Invoke();

    无法直接调用Invoke,因为在 System.Windows.Forms . Invoke方法是一个控件成员。

    这里有一个 example 我做得更早:

    public delegate void AddListViewItemCallBack(ListView control, ListViewItem item);
    public static void AddListViewItem(ListView control, ListViewItem item)
    {
        if (control.InvokeRequired)
        {
            AddListViewItemCallBack d = new AddListViewItemCallBack(AddListViewItem);
            control.Invoke(d, new object[] { control, item });
        }
        else
        {
            control.Items.Add(item);
        }
    }
    
        2
  •  2
  •   Jon Skeet    15 年前

    你需要打电话 Invoke 关于一个 实例 包含它的内容-如果您使用的是Windows窗体,则该控件为:

    control.Invoke(someDelegate);
    

    或者对于表单中的代码,可以使用隐式 this 参考文献:

    Invoke(someDelegate);
    

    你不需要经历任何特殊的困难。如果Visual Studio在抱怨,请指定编译器错误及其抱怨的代码。没有什么特别的 援引 在这里。

        3
  •  2
  •   Marc Gravell    15 年前

    Win Invoke 是的实例方法 Control -您只需要一个控件的实例(可以是 this 在许多情况下)。例如:

    txtBox.Invoke(...);
    

    如果您想要抽象化,也可以通过接口或同步上下文来访问它——但是最简单的方法是通过事件在UI上处理它,在这种情况下,控件很方便使用。

        4
  •  1
  •   Morfildur    15 年前

    如果你真的想成为世界上最好的C程序员,你必须知道,除非正确使用,否则线程不是一件好事。

    跨线程更新UI通常表示您滥用了线程。

    不管怎样,这还不够用 using System.Windows.Forms ,您必须将其添加到引用中。右键单击 References 在Project Explorer中,然后 添加引用 并选择 System.Windows.Forms

        5
  •  0
  •   Femaref    15 年前

    Invoke是一种对象方法,通常位于窗体库和某些异步类中的控件上。当然,您需要特定的对象才能调用 那个 控件/类。

        6
  •  0
  •   MusiGenesis    15 年前

    你大概是想打电话给 Invoke 从一个类内(即不是从一个类内 Form 或A Control )将代码移出类并移入窗体或控件中,您将看到 援引 编译并正确工作(严格来说,您的代码应该引用 this.Invoke , which makes the source of the method clear, but 援引 因为它假定 this )