Удалить текст с помощью Invoke? - PullRequest
0 голосов
/ 07 сентября 2011

Итак, документация, которую я до сих пор нашел в Интернете относительно свойства Invoke, не кажется особенно хорошей, что на самом деле раздражает, верите или нет. Я понимаю, что делает Invoke - вы не можете безопасно получить прямой доступ к графическому интерфейсу, поэтому invoke делает это безопасным способом. Это нормально, но я не понимаю переменных, которые входят в метод. Если бы я хотел, например, удалить текст из списка, как бы я это сделал? Я обхожу это далеко, прежде чем я немного потерялся.

private void DoStuff(string TextIWouldBeRemoving)
{        

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

Ответы [ 3 ]

0 голосов
/ 07 сентября 2011

Invoke - это все о многопоточности.

Вам нужно вызывать всякий раз, когда вы создали отдельный поток в своем коде, и вам нужно обновить элементы пользовательского интерфейса, не используя код, который выполняется вэтот новый поток создания.

Вы можете использовать BeginInvoke вместо синхронного метода Invoke.В этой статье есть хороший пример:

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

0 голосов
/ 07 сентября 2011
  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);
  }
0 голосов
/ 07 сентября 2011

Первый параметр - это метод, который вы хотите безопасно вызывать, второй параметр - массив объектов с аргументами этого метода

Таким образом, вы должны написать:

private void DoStuff(string TextIWouldBeRemoving)
{        
    if (listboxname.InvokeRequired)
    {
        listboxname.Invoke(DoStuff, new object[] { TextIWouldBeRemoving )};   
    }
    else
    {
        // Actually remove the text here!
    }
}
...