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