Form.Invoke
В ней был код такого рода:
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});