Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Form.Invoke

30K
29 января 2008 года
Nakamura
6 / / 05.11.2007
Был десктоп, который в одно и то же время запускал ряд потоков, каждый из которых что-то делал.

В ней был код такого рода:

public delegate object CallFunctionCallback(Form parent, object obj, string functionName, object[] args);

public delegate object CreateInstanceCallback(Form parent, Type type, object[] args);

public static object CallFunction(Form parent, object obj, string functionName, object[] args)
{
object result = null;

if (parent != null && obj != null)
{
if (parent.InvokeRequired)
{
CallFunctionCallback cb = CallFunction;
result = parent.Invoke(cb, new object[] {parent, obj, functionName, args});
}
else
{
Type type = obj.GetType();
BindingFlags flags = BindingFlags.InvokeMethod | BindingFlags.NonPublic | BindingFlags.Public |
BindingFlags.Instance;
Binder binder = null;
result = type.InvokeMember(functionName, flags, binder, obj, args);
}
}
return result;
}

Теперь то же самое нужно портировать в Windows Service. Т.е. теперь вызов данной функции идет из метода OnStart сервиса, а не из формы. Следовательно, нет метода Invoke.

ЗЫ. Немного о том, что делается в этой функции. В каждом запускаемом потоке есть связка: некоторый класс + WebBrowser. Мне нужно получить доступ к этому броузеру, заюзать его метод Navigate, чтоб перейти на некоторую страницу и получить результат в виде HtmlDocument.

Т.е. пример вызова функции, который был на форме - ThreadSafe.CallFunction(this, browsers[source], "Navigate", new object[] {url});
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог