所以,到目前为止我在网上找到的关于Invoke属性的文档看起来并不是特别好,这实际上有点烦人,信不信由你。我理解Invoke的作用 - 你不能直接安全地访问GUI,所以调用以安全的方式进行。这很好,但我不明白进入该方法的变量。例如,如果我想从列表框中删除文本,我该怎么做?在我迷失方向之前,我已经做到了这一点。
private void DoStuff(string TextIWouldBeRemoving)
{
if (listboxname.InvokeRequired)
{
listboxname.Invoke(SomeMysteriousParamaters, new object[] { TextIWouldBeRemoving )};
}
}
答案 0 :(得分:0)
答案 1 :(得分:0)
Invoke就是线程化。
只要在代码中创建了一个单独的线程,就需要进行调用,并且需要使用在新创建的线程中执行的代码更新用户界面元素。
您可以使用BeginInvoke而不是同步Invoke方法。这篇文章有一个很好的例子:
答案 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);
}