Удалить текст с помощью Invoke?
Итак, документация, которую я до сих пор нашел в Интернете относительно свойства Invoke, не кажется особенно хорошей, что на самом деле раздражает, верите вы или нет. Я понимаю, что делает Invoke - вы не можете безопасно получить доступ к графическому интерфейсу напрямую, поэтому invoke делает это безопасным способом. Это нормально, но я не понимаю переменных, которые входят в метод. Если бы я хотел, например, удалить текст из списка, как бы я это сделал? Я доберусь до этого далеко, прежде чем я немного потерялся.
private void DoStuff(string TextIWouldBeRemoving)
{
if (listboxname.InvokeRequired)
{
listboxname.Invoke(SomeMysteriousParamaters, new object[] { TextIWouldBeRemoving )};
}
}
3 ответа
Первый параметр - это метод, который вы хотите безопасно вызывать, второй параметр - массив объектов с аргументами этого метода.
Так что вы бы написали:
private void DoStuff(string TextIWouldBeRemoving)
{
if (listboxname.InvokeRequired)
{
listboxname.Invoke(DoStuff, new object[] { TextIWouldBeRemoving )};
}
else
{
// Actually remove the text here!
}
}
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);
}
Invoke - это все о потоках.
Вы должны выполнять вызов всякий раз, когда вы создали отдельный поток в своем коде, и вам нужно обновить элементы пользовательского интерфейса, не добавляя код, который выполняется в этом новом созданном потоке.
Вы можете использовать BeginInvoke вместо синхронного метода Invoke. Эта статья имеет хороший пример: