Hi,
My program reads values coming from a microcontroller, writes them to a file and adds the values to a chart plot. The code is composed of a backgroundworker triggered by a timer. The user has the ability to control how fast reading should take place. My problem is: the program is intended to run for a timer interval of at least 0.01s, however it only functions properly for timer intervals greater than 0.1s . Here is the related block of my code:
private: System::Void backgroundWorker1_DoWork(System::Object^ sender, System::ComponentModel::DoWorkEventArgs^ e) {
for (int n=0;n<8;n++){
adc_array[n]= this->serialPort1->ReadByte();
}
*myStream<<period<<";";
for(int f=0; f<8; f++){
*myStream<<adc_array[f]<<";";
}
*myStream<<endl;
backgroundWorker1->CancelAsync();
if(backgroundWorker1->CancellationPending){
e->Cancel=true;
return;
}
}
private: System::Void backgroundWorker1_RunWorkerCompleted(System::Object^ sender, System::ComponentModel::RunWorkerCompletedEventArgs^ e) {
chart1->Series["ADC1"]->Points->AddXY(period,adc_array[0]);
chart1->Series["ADC2"]->Points->AddXY(period,adc_array[1]);
chart1->Series["ADC3"]->Points->AddXY(period,adc_array[2]);
chart1->Series["ADC4"]->Points->AddXY(period,adc_array[3]);
chart1->Series["ADC5"]->Points->AddXY(period,adc_array[4]);
chart1->Series["ADC6"]->Points->AddXY(period,adc_array[5]);
chart1->Series["ADC7"]->Points->AddXY(period,adc_array[6]);
chart1->Series["ADC8"]->Points->AddXY(period,adc_array[7]);
period+=1000*w;
}
private: System::Void interval_Tick(System::Object^ sender, System::EventArgs^ e) {
this->serialPort1->Write(START);
backgroundWorker1->RunWorkerAsync();
}running the program for timer interval less than 0.1s pops up an error message: "This BackgroundWorker is currently busy and cannot run multiple tasks concurrently".
Thanks in advance