BOMWeather Bug 修复!

public class TaskManager
{
    /// <summary>
    /// 表示须要请求的参数
    /// </summary>
    private string[] requestParameter;
    /// <summary>
    /// 声明委托
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    public delegate void DoTasksEventHandler(Object sender, DoTasksEventArgs e);
    /// <summary>
    /// 声明事件
    /// </summary>
    public event DoTasksEventHandler DoTasks; 


    /// <summary>
    /// 定义DoTasksEventArgs类,传递给Observer信息
    /// </summary>
    public class DoTasksEventArgs : EventArgs
    {
        public readonly string[] requestParameter;
        public DoTasksEventArgs(string[] requestParameter)
        {
            this.requestParameter = requestParameter;
        }
    }

    /// <summary>
    /// 能够供继承自 Heater 的类重写,以便继承类拒绝其余对象对它的监视
    /// </summary>
    /// <param name="e"></param>
    protected virtual void OnDoTasks(DoTasksEventArgs e)
    {
        // 若是有对象注册
        if (DoTasks != null)
        {
            // 调用全部注册对象的方法
            DoTasks(this, e); 
        }
    }

    // 开始执行任务
    public void StartDoTasks()
    {
        //创建BoiledEventArgs 对象。
        DoTasksEventArgs e = new DoTasksEventArgs(requestParameter);
        // 调用 OnDoTasks方法
        OnDoTasks(e); 
    }
}


/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
        try
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        if (args.Length > 0 && args[0].ToLower() == "-s")
        {
            //经过命令行 xxxx.exe -s 参数启动
            Application.Run(new Main(args));
        }
        else
        {
            Application.Run(new Main());
        }
    }
    finally
    {
        //关闭 (写不写都行)
        NativeMethods.FreeConsole();
    }
}


/// <summary>
/// 手动运行
/// </summary>
public Main()
{
    SqlHelper = new DAL.MySqlHelper(DAL.MySqlHelper.SqlConnectionString);
    InitializeComponent();

    #region// SECOND !!
    
    mi_Invoker = new ThreadInvoker();
    mi_Ftp = new FTP(mi_Invoker);
    mi_Invoker.WriteLogCallback = new delWriteLog(WriteLog);
    mi_Ftp.WriteLogCallback = new delWriteLog(WriteLog);
    mi_Ftp.WriteProgressCallback = new delWriteProgress(WriteProgress);
    EnableGui(null, true);

    #endregion
}

/// <summary>
/// 经过命令行运行
/// </summary>
/// <param name="args"></param>
public Main(string[] args)
{
    SqlHelper = new DAL.MySqlHelper(DAL.MySqlHelper.SqlConnectionString);
    InitializeComponent();
    this.args = args;

    #region// SECOND !!

    mi_Invoker = new ThreadInvoker();
    mi_Ftp = new FTP(mi_Invoker);
    mi_Invoker.WriteLogCallback = new delWriteLog(WriteLog);
    mi_Ftp.WriteLogCallback = new delWriteLog(WriteLog);
    mi_Ftp.WriteProgressCallback = new delWriteProgress(WriteProgress);
    EnableGui(null, true);

    #endregion

    //base.OnLoad(e);
    trayIcon.Icon = this.Icon;
    trayIcon.Visible = Defaults.ShowShellIcon;

    mi_Timer.Interval = 1000;
    mi_Timer.Tick += new EventHandler(OnTimer);
    mi_Timer.Start();
}


/// <summary>
/// 经过命令行运行
/// </summary>
private void OnTimer(object sender, EventArgs e)
{
    if (ms32_Seconds-- <= 0)
    {
        mi_Timer.Stop();
        Application.DoEvents();
        try
        {
            #region//模拟任务管理
            ConnectToServer.Enabled = false;
            TaskManager TASKM = new TaskManager();
            //注册调用方法
            //TASKM.DoTasks += new TaskManager.DoTasksEventHandler(this.ConnectToServer_Click);
            //链接ftp
            TASKM.DoTasks += this.ConnectToServer_Click;
            if (mi_Invoker.Aborted)
            {
                //下载文件
                TASKM.DoTasks += this.DownLoad_Click;
                //解析文件
                TASKM.DoTasks += this.ParseFiles_Click;
                //追加到数据库
                TASKM.DoTasks += this.AppendToDB_Click;
            }
            //解析 DSX 追加到数据库
            TASKM.DoTasks += this.AppendWeather_Click;
            //调用被注册的对象方法
            TASKM.StartDoTasks();

            #endregion
            this.Close();
        }
        catch (Exception Ex)
        {
            MessageBox.Show(this, Ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            this.Close();
        }
    }
}



/// <summary>
/// 链接服务
/// </summary>
private void ConnectToServer_Click(object sender, EventArgs e)
{
    //禁用GUI操做
    EnableGui(ConnectToServer, false);

    logView.ClearText();
    mi_Invoker.ResetAbort();

    #region //FTP 初始
    var k_Server = new FTP.kServer();
    k_Server.s_Server = HostnameToip(txtServer.Text.Trim());
    k_Server.b_Passive = true;
    k_Server.u16_Port = (UInt16)Functions.ToInt(txtPort.Text.Trim());
    k_Server.s_User = "";
    k_Server.s_Password = "";
    k_Server.s_RemoteDir = txtRemoteDir.Text.Trim();
    mi_Ftp.SetServer(k_Server);
    #endregion

    #region //处理下载

    bool b_Error = false;
    //重试次数
    int Retry = Defaults.RetryDelay;
    //mi_Invoker.Aborted:Wininet.dll 接口成员(当监听 ConnectToServer_Click 事件链接超时并终止异步请求链接线程后状态)
    while (!mi_Invoker.Aborted)
    {
        //退出尝试
        if (Retry == 0) break;
        try
        {
            // 异常时终止线程
            mi_Ftp.WaitBeforeDownload(false, b_Error);
            // 载入目录列表
            mi_Ftp.LoadDirectoryListing(true);
            // 填充到ListView
            FillListViewFiles();
            break;
        }
        catch (Exception Ex)
        {
            b_Error = true;
            WriteLogInvoke(eLogType.Error, Ex.Message);
            //在这里你能够直接退出请求
        }
        finally
        {
            //重载FTP
            mi_Ftp.ResetAll();
        }
        Retry--;
    }

    #endregion

    #region //add files to listView
    if (SelectlistView.Items.Count > 0)
    {
        string firstBat = SelectlistView.Items[0].SubItems[1].Text;
        AddFilesTolistView(firstBat);
    }
    #endregion
    //启用GUI操做
    EnableGui(ConnectToServer, true);
}
相关文章
相关标签/搜索