0

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

private void DoStuff(string TextIWouldBeRemoving)
{        

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

3 回答 3

0

第一个参数是您要安全调用的方法,第二个参数是该方法的参数的对象数组

所以你会写:

private void DoStuff(string TextIWouldBeRemoving)
{        
    if (listboxname.InvokeRequired)
    {
        listboxname.Invoke(DoStuff, new object[] { TextIWouldBeRemoving )};   
    }
    else
    {
        // Actually remove the text here!
    }
}
于 2011-09-07T14:02:35.923 回答
0

Invoke 是关于线程的。

每当您在代码中创建了一个单独的线程时,您都需要进行调用,并且您需要从代码中更新用户界面元素,该代码在新创建的线程中执行。

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

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

于 2011-09-07T14:04:23.433 回答
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);
  }
于 2011-09-07T14:09:18.193 回答