Обновление управления из другого потока в C # 2.0 - PullRequest
5 голосов
/ 19 июня 2011

Я использую этот код с .NET 3.0

Action xx = () => button1.Text = "hello world";
this.Invoke(xx);

, но когда я попробовал его в .NET 2.0, я думаю, что в Action есть такой параметр типа:

Action<T>

Как реализовать первый код в .NET 2.0?

Ответы [ 2 ]

6 голосов
/ 19 июня 2011

Попробуйте это:

this.Invoke((MethodInvoker) delegate
{
    button1.Text = "hello world";
});

Хотя Action был введен в .NET 2.0, вы не можете использовать лямбда-выражение () => ... синтаксис в .NET 2.0.

Кстати, вы все равно можете использовать Action в .NET 2.0, если вы не используете лямбда-синтаксис:

Action action = delegate { button1.Text = "hello world"; };
Invoke(action);
1 голос
/ 19 июня 2011

Action<T> - это подпись, которая означает, что метод, представленный действием, должен принимать один параметр. Тип параметра зависит от сигнатуры вызова Invoke.

Некоторые примеры кода для представления различных подписей Action:

var noArgs = () => button1.Text = "hello world"; // Action
var oneArg = (arg) => button1.Text = "hello world"; // Action<T>
var twoArgs = (arg1, arg2) => button1.Text = "hello world"; // Action<T,T>

Если вам не нужно использовать параметры метода, это нормально. Но вам все равно нужно объявить их в лямбда-выражении.

Теперь это не ответит, как это сделать из .NET 2.0, но я предположил (возможно, неправильно, поправьте меня, если я ошибаюсь), что вы не знали, как лямбды соответствуют типам действий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...