Я пишу приложение, которое загружает некоторый JavaScript в объект WebBrowser. Чтобы предотвратить загрузку и связанную с этим задержку, я инициализирую его в основном потоке пользовательского интерфейса при загрузке приложения и сохраняю статическую ссылку на него.
Проблема возникает, когда у меня есть другие темы, которые хотят его использовать. Таким образом, я пытаюсь использовать класс Monitor, чтобы выручить меня.
На основной ветке у меня есть
public static readonly WebBrowser webBrowser = new WebBrowser();
private static readonly object syncObject = new object();
когда другие потоки вызывают его, у меня есть следующая функция.
public static string GetDataFromJs(string key)
{
string result = string.Empty;
if (isInitialized == true)
{
try
{
webBrowser.Dispatcher.BeginInvoke(() =>
{
result = (string)webBrowser.InvokeScript("getData", key);
//TODO: pulse monitor object.
});
//TODO: wait for monitor object to get pulsed.
return result;
}
catch(Exception ex)
{
return string.Empty;
}
}
return string.Empty;
}
Может ли кто-нибудь помочь мне понять, что мне нужно делать отсюда? Я пробовал Monitor.Wait / Enter и Monitor.Pulse в соответствующих областях комментариев, но получаю исключения Syncronization.
Спасибо!