0
我正在写一个应用程序加载一些JavaScript到WebBrowser对象。为了防止这种情况发生,以及与之相关的延迟,我在应用程序加载并保留对其的静态引用时,在主UI线程上初始化它。如何使用Monitor类使异步行为看起来同源?
问题出在我有其他线程想要使用它。因此,我试图用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例外。
谢谢!
我觉得自己像一个白痴哈哈......忘了把它所有的锁内。 – Dave 2012-02-03 04:00:25