public MCSWebBrowser BrowserFromCache(string applicationName) { WaitForBrowsersToInitialize(); lock (BrowserStorage) { if (cache.Count > 0) { // initialized browsers MCSWebBrowser b = cache[0] as MCSWebBrowser; if (BrowserStorage.Children.Contains(cache[0])) { BrowserStorage.Children.Remove(cache[0]); } cache.RemoveAt(0); b.Reset(applicationName); return(b); } else { Debug.Assert(BrowserStorage.Children.Count == 0); Trace.WriteLine("Browser Cache empty, providing uninitialized browser!"); MCSWebBrowser b = new MCSWebBrowser(); b.Reset(applicationName); return(b); } } }
private void ClearCache() { lock (BrowserStorage) { cache.Clear(); while (BrowserStorage.Children.Count > 0) { MCSWebBrowser b = BrowserStorage.Children[0] as MCSWebBrowser; BrowserStorage.Children.RemoveAt(0); b.Dispose(); } } }
void LoadupCache() { lock (BrowserStorage) { for (int i = BrowserStorage.Children.Count; i < cachesize; i++) { MCSWebBrowser browser = new MCSWebBrowser(); BrowserStorage.Children.Add(browser); browser.BrowserObjectAppeared += browser_BrowserObjectAppeared; browser.Navigate("about:blank"); // trigger the load of the browser instance } } }
public void BrowserToCache(MCSWebBrowser webBrowser) { lock (BrowserStorage) { if (allowGrow == false && BrowserStorage.Children.Count >= cachesize) { webBrowser.Dispose(); return; } BrowserStorage.Children.Add(webBrowser); cache.Add(webBrowser); // assume this is an initialized browser webBrowser.HaltUse(); } }
private void WaitForBrowsersToInitialize() { int cacheCount, childrenCount; lock (cache) cacheCount = cache.Count; lock (BrowserStorage) childrenCount = BrowserStorage.Children.Count; DateTime dtTimeout = DateTime.Now + TimeSpan.FromSeconds(5); while (cacheCount == 0 && childrenCount > 0) { if (DateTime.Now > dtTimeout) { lock (BrowserStorage) { for (int i = 0; i < BrowserStorage.Children.Count; i++) { MCSWebBrowser b = BrowserStorage.Children[i] as MCSWebBrowser; if (b != null) { b.Navigate("about:blank"); // try again to get this going } } dtTimeout = DateTime.Now + TimeSpan.FromSeconds(5); } } // browsers initializing System.Windows.Forms.Application.DoEvents(); lock (cache) cacheCount = cache.Count; lock (BrowserStorage) childrenCount = BrowserStorage.Children.Count; } }