时间:2011-09-07 13:59:19

标签: c# invoke invokerequired

所以,到目前为止我在网上找到的关于Invoke属性的文档看起来并不是特别好,这实际上有点烦人,信不信由你。我理解Invoke的作用 - 你不能直接安全地访问GUI,所以调用以安全的方式进行。这很好,但我不明白进入该方法的变量。例如,如果我想从列表框中删除文本,我该怎么做?在我迷失方向之前,我已经做到了这一点。

private void DoStuff(string TextIWouldBeRemoving)
{        

if (listboxname.InvokeRequired)
    {
        listboxname.Invoke(SomeMysteriousParamaters, new object[] { TextIWouldBeRemoving )};   
    }
}

3 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

Invoke就是线程化。

只要在代码中创建了一个单独的线程,就需要进行调用,并且需要使用在新创建的线程中执行的代码更新用户界面元素。

您可以使用BeginInvoke而不是同步Invoke方法。这篇文章有一个很好的例子:

http://msdn.microsoft.com/en-us/library/0b1bf3y3.aspx

答案 2 :(得分:0)

  private void button1_Click(object sender, EventArgs e)
  {
     if (listBox1.InvokeRequired)
     {
        Action<string> d = DoAnything;
        listBox1.Invoke(d, new object[] { "Item 1" });
     }
     else
        DoAnything("Item 1");
  }

  void DoAnything(string itemText)
  {
     listBox1.Items.Remove(itemText);
  }