/// <summary> /// Clean up any resources being used. /// </summary> /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> protected override void Dispose(bool disposing) { ds.Dispose(); Ad.Dispose(); MyCom.Dispose(); if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); }
private void Button2_Click(object sender, EventArgs e) { if (this.selected_com == null) { MessageBox.Show("comポートを選んでください"); return; } if (!(button2_flag) && !(this.parent_manager_called)) { this.class_my_com = new MyCom(this.selected_com); this.button2_flag = true; class_my_gra = new MyGraph(this.chart1); class_my_starttime = DateTime.Now; //エラー回避のため this.Parent_ManagerAsync(class_my_com, 1, class_my_gra); } }
private async Task Parent_ManagerAsync(MyCom myc, int intervaltime, MyGraph myg) //データの書き込み、グラフ作成を行う { this.parent_manager_called = true; await Task.Run(() => { while (!this._cancellationtoken.Token.IsCancellationRequested) { string pressure = myc.Manager(); if (!this._cancellationtoken.Token.IsCancellationRequested) { this.UpdateText(pressure); } if (this.button1_flag) //記録開始ボタンが押されているとき { DateTime nowtime = DateTime.Now; this.Write_csv_and_graph(pressure, nowtime, myg, 1); } //Thread.Sleep(intervaltime * 1000); } }); //ここにデータをファイルに保存するようなコードを書く(cancellationtokenを使う場合のみ) }
private void Button1_Click(object sender, EventArgs e) { if (this.selected_com == null) { MessageBox.Show("comポートを選んでください"); return; } if (this.button1_flag == false && this.my_all_data.Count > 0) { DialogResult my_result = MessageBox.Show("今のグラフに描かれているデータは消えますがよろしいですか?", "question", MessageBoxButtons.YesNo); if (my_result == DialogResult.Yes) { //すべて初期化(エラー起きやすい) this.my_all_data.Clear(); //this.chart1.Series.Remove(this.class_my_gra.which_main_series()); //this.class_my_gra = new MyGraph(this.chart1); this._cancellationtoken.Cancel(); Thread.Sleep(300); this._cancellationtoken.Dispose(); this._cancellationtoken = new CancellationTokenSource(); this.parent_manager_called = false; this.class_my_starttime = DateTime.Now; } else { return; } } this.button1_flag = !this.button1_flag; if (this.button1_flag) { this.button1.Text = "STOP"; if (this.parent_manager_called == false) { this.class_my_com = new MyCom(this.selected_com); this.class_my_gra = new MyGraph(this.chart1); this.class_my_starttime = DateTime.Now; this.Parent_ManagerAsync(class_my_com, 1, class_my_gra); } else { this.class_my_starttime = DateTime.Now; //よく考えてない } //graph code //MyGraph mygra = new MyGraph(this.chart1); //List<MyPoints> mydatas = Form1.MyGraph.make_data(); //mygra.Plot(mydatas); } else { this.button1.Text = "記録開始"; //_cancellationtoken.Cancel(); //button2用にparent_managerAsync が死んでしまうので再起動しておく必要がある(不要かも) //_cancellationtoken.Dispose(); //ここにデータをファイルに保存するかを決める if (this.checkBox1.Checked == true) { 前を付けて保存AToolStripMenuItem.PerformClick(); return; } DialogResult __result = MessageBox.Show("ファイルを保存しますか?", "question", MessageBoxButtons.YesNo); if (__result == DialogResult.Yes) { 前を付けて保存AToolStripMenuItem.PerformClick(); } } }
private static T Comm <T, U>(MyCom <T, U> func, String app, String relativeUrl, U parms) { List <EurekaUrlAction> urls = new List <EurekaUrlAction>(); if (!_EurekaUrls.TryGetValue(app, out urls)) { RefreshEurekaUrls(app); urls = _EurekaUrls[app]; } bool success = false; String errorMessage = String.Empty; T result = default(T); int count = urls.Count; if (count == 0) { errorMessage = "没有可用的服务,请检查服务提供者!"; } for (int i = 0; i < count; i++) { EurekaUrlAction eua = urls[i]; try { if ((eua.IsActive && eua.Count < invalidCount) || (!eua.IsActive && eua.Count == revokeCount)) { // 获取数据 result = func(eua.Url + relativeUrl, parms); success = true; lock (urls) // 获取数据成功,将已使用的地址轮换至最后以平衡服务器 { eua.IsActive = true; eua.Count = 0; urls.Remove(eua); urls.Add(eua); } } else { lock (urls) { if (eua.IsActive) { //该地址失效次数过多,被熔断 eua.IsActive = false; eua.Count = 0; } else { //次数+1 eua.Count++; } } } } catch (BizCustomException bex) { lock (urls) // 出现业务异常,跳出,将已使用的地址轮换至最后以平衡服务器 { eua.IsActive = true; eua.Count = 0; urls.Remove(eua); urls.Add(eua); } throw bex; } catch (Exception ex) { errorMessage += eua.Url + relativeUrl + " --- " + ex.Message + "\r\n"; lock (urls) { if (eua.IsActive) { eua.Count++; } else { eua.Count = 0; } } } if (success) { break; } } if (success) { return(result); } else { throw new Exception(errorMessage); } }