void Load() { var monitor = loadMonitor; System.Threading.ThreadPool.QueueUserWorkItem(delegate { try { HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url); WebResponse resp = req.GetResponse(); MemoryStream ms = new MemoryStream(); using (var s = resp.GetResponseStream()) { s.CopyTo(ms); } var data = ms.ToArray(); MonoDevelop.Ide.DispatchService.GuiSyncDispatch(delegate { Gdk.PixbufLoader l = new Gdk.PixbufLoader(resp.ContentType); l.Write(data); image = l.Pixbuf; l.Close(); monitor.Dispose(); }); // Replace the async operation to avoid holding references to all // objects that subscribed the Completed event. loadOperation = NullAsyncOperation.Success; } catch (Exception ex) { loadMonitor.ReportError(null, ex); Gtk.Application.Invoke(delegate { monitor.Dispose(); }); loadOperation = NullAsyncOperation.Failure; } loadMonitor = null; }); }