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);
}
相關文章
相關標籤/搜索