我正在编写一个将一些javascript加载到WebBrowser对象中的应用程序。为了防止它被加载以及与之相关的延迟,我在我的应用程序加载并保持静态引用时在主UI线程上初始化它。
当我有其他想要使用它的线程时,问题就来了。因此,我试图使用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异常。
谢谢!
答案 0 :(得分:0)
public static string GetDataFromJs(string key) { string result = string.Empty;
if (isInitialized == true)
{
try
{
webBrowser.Dispatcher.BeginInvoke(() =>
{
lock(syncObject)
{
result = (string)webBrowser.InvokeScript("getData", key);
Monitor.Pulse(syncObject);
}
});
lock(syncObject)
{
Monitor.Wait(syncObject);
}
return result;
}
catch(Exception ex)
{
return string.Empty;
}
}
return string.Empty;
}
确保这是正确的:)