Exemple #1
0
        /// <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();
                }
            }
        }
Exemple #5
0
        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);
            }
        }