Альтернативный вопрос: Почему VS10 так стремится жаловаться на, Вызывают?
В моих поисках продолжения, чтобы заставить мое приложение работать становятся мирами лучший программист C#, я решил, что потоки являются Хорошим Thing™.
MSDN имеет полезную статью о совершении ориентированных на многопотоковое исполнение звонков к средствам управления, но это (и на вид любая статья о предмете) косвенно ссылается на метод под названием, Вызывают. Иногда даже BeginInvoke, который я считал, должен быть предпочтен.
Все это было бы большим, если я мог бы добраться, Visual Studio для распознавания Вызывают. MSDN заявляет, что содержится в Системе. Windows. Блок форм, но я уже 'использую' это. Безусловно, я также попытался использовать Систему. Поточная обработка, но напрасно.
Что получают обручи, я должен перейти до, вызывают работу?
Invoke находится в Control. Т.е. Control.Invoke ();
Невозможно вызвать Invoke напрямую, поскольку такого метода нет в System.Windows.Forms
. Метод Invoke - это элемент управления.
Вот пример , который я сделал ранее:
public delegate void AddListViewItemCallBack(ListView control, ListViewItem item);
public static void AddListViewItem(ListView control, ListViewItem item)
{
if (control.InvokeRequired)
{
AddListViewItemCallBack d = new AddListViewItemCallBack(AddListViewItem);
control.Invoke(d, new object[] { control, item });
}
else
{
control.Items.Add(item);
}
}
Вам нужно вызвать Invoke
на экземпляре чего-то, что содержит его - если вы используете Windows Forms, это будет элемент управления:
control.Invoke(someDelegate);
или для кода внутри формы вы можете использовать неявную ссылку this
:
Invoke(someDelegate);
Вам не нужно проходить через какие-либо особые обручи. Если Visual Studio жалуется, пожалуйста, укажите ошибку компилятора и код, на который он жалуется. Здесь нет ничего особенного в Invoke
.
Метод winform Invoke
является методом экземпляра Control
- вам просто нужен экземпляр элемента управления (который во многих случаях может быть this
). Например:
txtBox.Invoke(...);
К нему также можно получить доступ через интерфейс или sync-context, если вы хотите абстракции - но самый простой подход заключается в том, чтобы обрабатывать его в пользовательском интерфейсе через событие, в этом случае элементы управления удобно доступны.
Предположительно, вы пытаетесь вызвать Invoke
из класса (т.е.. т.е. не из Form
или Control
). Переместите свой код из класса в форму или элемент управления, и вы увидите, что Invoke
компилируется и работает правильно (строго говоря, ваш код должен ссылаться на this.Invoke
, что делает источник метода ясным, но Invoke
будет работать также, поскольку он предполагает this
).
Invoke - это метод для объектов, обычно находящийся в элементах управления в библиотеке форм и некоторых асинхронных классах. Конечно, вам нужны определенные объекты, чтобы иметь возможность вызывать Invoke для этого элемента управления / класса.
Если вы действительно хотите стать лучшим в мире программистом на C #, вы должны усвоить, что потоки - не лучший вариант. вещь, если не используется правильно.
Обновление пользовательского интерфейса между потоками обычно является признаком того, что вы злоупотребляете потоками.
В любом случае недостаточно использовать с помощью System.Windows.Forms
, вы должны добавить его в ссылки. Щелкните правой кнопкой мыши Ссылки
в проводнике проекта, затем Добавить ссылки и выберите System.Windows.Forms