Exemplo n.º 1
0
        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;
            });
        }