public void Lookup(String word, SetDefinitionDelegate setDefinition)
        {
            Application.Invoke(delegate {
                setDefinition("Loading...");
            });

            String URL = String.Format(this.LookupURL, word);
            HttpWebRequest request = HttpWebRequest.Create(URL) as HttpWebRequest;
            request.UserAgent = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5";

            request.BeginGetResponse(result => {
                FinishLookup(result, request, setDefinition);
            }, null);
        }
        private void FinishLookup(IAsyncResult result, HttpWebRequest request,
                                  SetDefinitionDelegate setDefinition)
        {
            string content;

            using (HttpWebResponse response = request.EndGetResponse(result) as HttpWebResponse) {
                Encoding responseEncoding = Encoding.GetEncoding(response.CharacterSet);

                using (StreamReader reader = new StreamReader(response.GetResponseStream(),
                                                              responseEncoding)) {
                    content = reader.ReadToEnd();
                }
            }

            Application.Invoke(delegate {
                setDefinition(ExtractDefinition(content));
            });
        }