public MediaWikiOptions(MediaWikiAccount acc, IWebProxy proxy)
 {
     this.Account       = acc;
     this.ProxySettings = proxy;
 }
 public MediaWikiOptions(MediaWikiAccount acc, IWebProxy proxy)
 {
     this.Account = acc;
     this.ProxySettings = proxy;
 }
 private void TestMediaWikiAccountThread(MediaWikiAccount acc, Action success, Action<string> failure)
 {
     try
     {
         MediaWiki connector = new MediaWiki(new MediaWikiOptions(acc, null)); // TODO: MediaWiki CheckProxySettings().GetWebProxy
         connector.Login();
         success();
     }
     catch (Exception ex)
     {
         // ignore ThreadInterruptedException : the request timed out and the thread was interrupted
         if (!(ex.InnerException is ThreadInterruptedException))
             failure(ex.Message);
     }
 }
 private void MediawikiAccountAddButton_Click(object sender, EventArgs e)
 {
     MediaWikiAccount acc = new MediaWikiAccount("New Account");
     Config.MediaWikiAccountList.Add(acc);
     ucMediaWikiAccounts.AccountsList.Items.Add(acc);
     ucMediaWikiAccounts.AccountsList.SelectedIndex = ucMediaWikiAccounts.AccountsList.Items.Count - 1;
 }
 private void TestMediaWikiAccount(MediaWikiAccount account, Action success, Action<string> failure)
 {
     var timeoutTimer = new System.Windows.Forms.Timer();
     Thread thread = new Thread(new ThreadStart(delegate
     {
         TestMediaWikiAccountThread(account,
             delegate()
             {
                 timeoutTimer.Stop(); success();
             },
             delegate(string msg)
             {
                 timeoutTimer.Stop(); failure(msg);
             });
     }));
     thread.Start();
     timeoutTimer.Interval = 10000;
     timeoutTimer.Tick += new EventHandler(delegate(object sender, EventArgs e)
     {
         thread.Interrupt();
         timeoutTimer.Stop();
         failure("The website at the URL you specified doesn't answer");
     });
     timeoutTimer.Start();
 }