2012-11-18 47 views
0

我知道我可以搜索proccessId /運行任務的名稱並殺死我需要的進程。winform關閉自我加上另一個WebBrowserControl

雖然到現在我沒有開發schedualed任務/自executble應用,

,所以我並不需要知道如何讓應用程序後execition

試圖關閉一切(關閉本身包括WebDriver)通過Application.Exit +或this.Close() 後,我有我想要的。任務完成 。 請關閉...沒有更多的工作給你。 但先生。 Program.cs仍然需要來自Form1的東西。 說一些關於 無法訪問處置的對象。 對象名稱:'Form1'。

即使任務完成,兩者的任意組合都在某個點返回一個豁免錯誤 (來自program.cs)。沒有更多的代碼被請求。(?)由我..至少。

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using OpenQA.Selenium; 
using OpenQA.Selenium.IE; 
using System.IO; 

namespace HT_R_WbBrows2 
{ 
    public partial class Form1 : Form 
    { 


    public IeEnginGenerator Iengn = new IeEnginGenerator(); 
    public Form1() 
    { 
     InitializeComponent(); 
     //setLogView(View.Details); 

     string extractededVal = Iengn.ExtractPageValue(Iengn.itrfWebEng); 
     string flnm = @" the directory path to file --> \dolarRate.asp"; 



     File.WriteAllText(fn, extractededVal); 

     this.Close(); 
     Application.Exit(); 
    } 





public class IeEnginGenerator 
{ 

    private string directory = Environment.CurrentDirectory;///Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase); 


    public IWebDriver IwebEngine; 
    public List<string> ListElementsInnerHtml = new List<string>(); 
    public HtmlAgilityPack.HtmlDocument Dnetdoc = new HtmlAgilityPack.HtmlDocument(); 

    #region <<=========== setupDriver ============>> 
    public string ExtractPageValue(IWebDriver DDriver, string url="") 
    { 
     if(string.IsNullOrEmpty(url)) 
     url = @"http://www.boi.org.il/he/Markets/ExchangeRates/Pages/Default.aspx"; 
     var service = InternetExplorerDriverService.CreateDefaultService(directory); 
     service.LogFile = directory + @"\seleniumlog.txt"; 
     service.LoggingLevel = InternetExplorerDriverLogLevel.Trace; 

     var options = new InternetExplorerOptions(); 
     options.IntroduceInstabilityByIgnoringProtectedModeSettings = true; 

     DDriver = new InternetExplorerDriver(service, options, TimeSpan.FromSeconds(60)); 
     DDriver.Navigate().GoToUrl(url); 

     Dnetdoc.LoadHtml(DDriver.PageSource); 
     string Target = Dnetdoc.DocumentNode.SelectNodes("//table//tr")[1].ChildNodes[7].InnerText; 
      //.Select(tr => tr.Elements("td").Select(td => td.InnerText).ToList()) 
      //.ToList(); 


     return Math.Round(Convert.ToDouble(Target), 2).ToString(); 

     //return "";//Math.Round(Convert.ToDouble(TempTxt.Split(' ')[10]),2).ToString(); 

    } 
    #endregion 



} 






} 
} 
+0

在窗體構造函數中調用Close()是自殺。它會炸彈,因爲Program.cs中的Main()方法使用封閉的形式調用Application.Run()。代碼沒什麼意義,你需要重新考慮這個。 –

回答

1

爲什麼要使用winform應用程序?控制檯應用程序可能足以滿足你正在做的事情。一旦Main()結束,您的應用也將關閉。由於應用程序runloop,Main()永遠不會以winform應用程序結束。

編輯:

這裏將是正確的方法來做到這一點。您需要註冊表單Load事件並在那裏運行代碼,而不是在構造函數中。您不能從構造函數中關閉一個winform。

編輯2:將此代碼放在Form1()構造函數中。 InitializeComponent()之後的某處;

this.Load += (sender,args)=>{ /*do all your work here*/ 
    string extractededVal = Iengn.ExtractPageValue(Iengn.itrfWebEng); 
    string flnm = @" the directory path to file --> \dolarRate.asp"; 
    File.WriteAllText(fn, extractededVal); 
    Application.Exit(); 
    }; 
+0

謝謝。但我真的討厭控制檯。從來沒有通過這個類別學過,我知道從我的直覺我可以通過控制檯應用程序來完成,儘管我可以考慮完成它,即使我會按照所告知的那樣做,如果我需要它在一個Winform中所以我可以在一種模式(查看也許以後我可能會添加functionanllity ...等)我知道你一定是對的,但是......你能告訴mr'program.cs只運行一個(條件)條件=任務不完整? – LoneXcoder

+0

查看上面的答案。把這段代碼放在你的Form1()constrructor – Matt

+0

中,我確實使用了Console App ......最終,稍後會對此進行處理(:,經過一些修改:therad指向執行一組方法的void,然後在完成時使用方法iWebdriver.Close(),服務Dispose(),沒有更多的運行應用程序或部分應用程序仍然活着! – LoneXcoder

相關問題