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