Который содержит блок C#, Вызывают?

Альтернативный вопрос: Почему VS10 так стремится жаловаться на, Вызывают?

В моих поисках продолжения, чтобы заставить мое приложение работать становятся мирами лучший программист C#, я решил, что потоки являются Хорошим Thing™.

MSDN имеет полезную статью о совершении ориентированных на многопотоковое исполнение звонков к средствам управления, но это (и на вид любая статья о предмете) косвенно ссылается на метод под названием, Вызывают. Иногда даже BeginInvoke, который я считал, должен быть предпочтен.

Все это было бы большим, если я мог бы добраться, Visual Studio для распознавания Вызывают. MSDN заявляет, что содержится в Системе. Windows. Блок форм, но я уже 'использую' это. Безусловно, я также попытался использовать Систему. Поточная обработка, но напрасно.

Что получают обручи, я должен перейти до, вызывают работу?

5
задан Tom Wright 24 June 2010 в 11:53
поделиться

6 ответов

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);
    }
}
4
ответ дан 14 December 2019 в 01:01
поделиться

Вам нужно вызвать Invoke на экземпляре чего-то, что содержит его - если вы используете Windows Forms, это будет элемент управления:

control.Invoke(someDelegate);

или для кода внутри формы вы можете использовать неявную ссылку this:

Invoke(someDelegate);

Вам не нужно проходить через какие-либо особые обручи. Если Visual Studio жалуется, пожалуйста, укажите ошибку компилятора и код, на который он жалуется. Здесь нет ничего особенного в Invoke.

2
ответ дан 14 December 2019 в 01:01
поделиться

Метод winform Invoke является методом экземпляра Control - вам просто нужен экземпляр элемента управления (который во многих случаях может быть this). Например:

txtBox.Invoke(...);

К нему также можно получить доступ через интерфейс или sync-context, если вы хотите абстракции - но самый простой подход заключается в том, чтобы обрабатывать его в пользовательском интерфейсе через событие, в этом случае элементы управления удобно доступны.

2
ответ дан 14 December 2019 в 01:01
поделиться

Предположительно, вы пытаетесь вызвать Invoke из класса (т.е.. т.е. не из Form или Control). Переместите свой код из класса в форму или элемент управления, и вы увидите, что Invoke компилируется и работает правильно (строго говоря, ваш код должен ссылаться на this.Invoke, что делает источник метода ясным, но Invoke будет работать также, поскольку он предполагает this).

0
ответ дан 14 December 2019 в 01:01
поделиться

Invoke - это метод для объектов, обычно находящийся в элементах управления в библиотеке форм и некоторых асинхронных классах. Конечно, вам нужны определенные объекты, чтобы иметь возможность вызывать Invoke для этого элемента управления / класса.

0
ответ дан 14 December 2019 в 01:01
поделиться

Если вы действительно хотите стать лучшим в мире программистом на C #, вы должны усвоить, что потоки - не лучший вариант. вещь, если не используется правильно.

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

В любом случае недостаточно использовать с помощью System.Windows.Forms , вы должны добавить его в ссылки. Щелкните правой кнопкой мыши Ссылки в проводнике проекта, затем Добавить ссылки и выберите System.Windows.Forms

1
ответ дан 14 December 2019 в 01:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: