public void Start() { var root = Util.GetWwwRootPath(); // ドキュメント・ルート var prefix = "http://+:20000/"; // 受け付けるURL try { listener.Prefixes.Add(prefix); // プレフィックスの登録 listener.Start(); } catch (Exception e) { System.Windows.Forms.MessageBox.Show("Webサーバの初期化に失敗しました。\n" + "[原因] 二重起動した。「URL名前空間」の予約を行っていない。\n" + "[詳細] " + e.Message, Program.Logo); System.Windows.Forms.Application.Exit(); // 終了 } while (stop == false) { HttpListenerContext context; try { context = listener.GetContext(); TaskList.StartNew(Excute, context); } catch (HttpListenerException) { return; } catch (ObjectDisposedException) { return; } } }
static void Main(string[] args) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); WebServer ws = null; var ticket = new Ticket("/tvmaid/mutex/main"); try { if (ticket.GetOwner(60 * 1000) == false) { ticket = null; throw new AppException("時間内に二重起動が解消されませんでした。"); } Log.Write(AppVer); LoadDef(); //先に読み込んでおく GenreConv.GetInstance(); TextConv.GetInstance(); if (args.Length == 1 && args[0] == "-tunerupdate") { UpdateTuner(); } TaskList.StartNew(() => { RecTimer.GetInstance().Start(); }); ws = new WebServer(); TaskList.StartNew(() => { ws.Start(); }); TunerMon.GetInstance(); Application.Run(new Tasktray()); } catch (Exception e) { MessageBox.Show("このエラーは回復できないため、アプリケーションは終了します。[詳細]" + e.Message, Logo); } finally { if (ws != null) { ws.Dispose(); } RecTimer.GetInstance().Dispose(); if (StateDef != null) { StateDef.Save(); } //スレッド終了待ち int i = 0; while (TaskList.GetInstance().IsFinish() == false) { System.Threading.Thread.Sleep(100); i++; if (i > 300) { break; } } if (ticket != null) { ticket.Dispose(); } } }
public void Start() { using (var sql = new Sql(true)) { //チューナ毎のスレッドを起動 sql.Text = @"select * from tuner"; using (var t = sql.GetTable()) { while (t.Read()) { var tuner = new Tuner(t); TaskList.StartNew(StartThread, tuner); } } //番組表取得時間を初期化 nextEpgTime = DateTime.Now.Date; nextEpgTime = nextEpgTime.AddHours(Program.UserDef["epg.autoupdate.hour"].ToInt()); //メインループ //番組表取得、自動予約の監視 while (stop == false) { try { if (nextEpgTime <= DateTime.Now) { //古い予約と番組情報の削除 //先に予約を消すこと(予約に番組情報への参照があるため) ClearnRecord(sql); ClearnEvent(sql); //番組表取得1時間以内なら実行 if (nextEpgTime + TimeSpan.FromHours(1) >= DateTime.Now) { epg = true; } //次回を翌日にセット nextEpgTime = DateTime.Now.Date; nextEpgTime = nextEpgTime.AddDays(1); //翌日 nextEpgTime = nextEpgTime.AddHours(Program.UserDef["epg.autoupdate.hour"].ToInt()); } //番組表取得 if (epg) { epgQu.Enqu(); epg = false; } StartAutoRecord(sql); //自動予約 Thread.Sleep(mainSleep); } catch (Exception e) { Log.Write("エラーが発生しました。[詳細] " + e.Message); } } } }