winform关闭self以及另一个WebBrowser控件

时间:2012-11-18 19:13:50

标签: c# winforms

我知道我可以搜索proccessId /正在运行的任务的名称并杀死我需要的进程。

虽然到现在为止我还没有开发调度任务/自我执行的应用程序,

因此我不需要知道如何在执行后使应用程序自动关闭

尝试通过Application.Exit +或this.Close()关闭所有内容(包括WebDriver) 我得到了我想要的东西之后。任务完成 。 请关闭......不再为你工作了。 但是先生。 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



}






}
}

1 个答案:

答案 0 :(得分: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(); 
  };