Graph通过线程编程在visual c ++中基于数据库中的新值不断更新

时间:2013-07-10 12:54:54

标签: database winforms visual-c++ graph

我在visaul c ++中有一个数据库和一个 winform 应用程序。 db有两列Date和Temp。这些值由不同的c ++程序自动插入到数据库中,该程序计划每2-3秒运行一次。在表单中有一个“Show Plot”按钮,点击它会显示Date vs Temp图。我能做到这一点。然而我想要的是这个图表不断更新基于数据库中的新值...像心跳监视器或这样的效果。我怎样才能做到这一点。请建议我如何使用visual c ++和THREAD编程中的 winform项目

Reards

PS:因为我在visual c ++中使用Winform应用程序,所以为图片元素生成了很多代码。可能有用的部分是:

private: System::Void temperature_btn_Click(System::Object^  sender, System::EventArgs^  e) {

             String^  constring = L"datasource=localhost;port=3306;username=root;password=root;";
             MySqlConnection^ conDataBase = gcnew MySqlConnection(constring);
             MySqlCommand^ cmdDataBase = gcnew MySqlCommand("select * from `data`.`test`;",conDataBase); 
             MySqlDataReader^ myReader;

             try{
                 conDataBase->Open();
                 myReader = cmdDataBase->ExecuteReader();
                // MessageBox::Show("Data Inserted");
                 while(myReader->Read()){

                     String^ v_datetime;
                     String^ v_pressure;
                     v_datetime = myReader->GetString("datetime");
                     v_pressure = myReader->GetInt32("temp").ToString();

                     String^ status;
                     if (myReader->GetInt32("temp") > 1000 && myReader->GetInt32("temp") < 50 )
                     {
                         status = " Abnormal ";
                         this->chart2->Series["Temperature"]->Color = System::Drawing::Color::Red;
                     }
                     else{
                        status = " Normal";
                     }

                     this->label3->Text = status;

                     this->chart2->Series["Temperature"]->Points->AddXY(v_datetime,myReader->GetInt32("temp"));
                    // comboBox1->Items->Add(vName);

                 }
             }catch(Exception^ex){
                 MessageBox::Show(ex->Message);
             }


     }

需要做些什么来使这个动态...即图表始终以规则的间隔从数据库中挑选值...比如每3-5秒(数据库正在被另一个完全不相关的进程每2更新一次) -3秒)

PS编辑2:对不起......我应该说得清楚......如何通过线程做到这一点......我再次道歉,因为不清楚

1 个答案:

答案 0 :(得分:1)

Timer添加到Windows窗体(从工具箱中)并为Tick事件注册EventHandler。同时将“Intervall”设置为您想要的值。然后将属性“Enabled”设置为“true”或在“Form_Loaded”EventHandler中手动启动它。