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); }