I have two methods that work together and they make a big double array (every 1/1000000S 5000 item) and this array should show a chart (Dundas chart). But the chart is not updating.
Please help me!
Sorry for my bad English!
This my code:
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Runtime.InteropServices;
using System.Threading;
using Dundas.Charting.WinControl;
using Dundas.Charting.WinControl.Utilities;
namespace Online_Detector
{
public partial class frmMain : Form
{
public frmMain()
{
InitializeComponent();
}
#region Fields
double fName = 0;
public object dataDigitalGlobal;
long num;
#endregion
#region Method
private void ManualSavetoFile(double Value, double Time)
{
//Get Path
//fName += 1;
string IntLocation = Convert.ToString(fName) + ".txt";
#region Write File
FileStream FOut = null;
try
{
if (File.Exists(IntLocation))
FOut = new FileStream(IntLocation, FileMode.Append, FileAccess.Write, FileShare.ReadWrite, 4096, true);
else
FOut = new FileStream(IntLocation, FileMode.Create, FileAccess.Write, FileShare.ReadWrite, 4096, true);
StreamWriter SOut = new StreamWriter(FOut);
// <Add Line To Export File >
lock (this)
{
if (FOut.CanWrite)
{
SOut.WriteLine(Value);
SOut.WriteLine(Time);
}
}
// <Add Line To Export File >
SOut.Close();
FOut.Close();
}
catch (IOException Err)
{
MessageBoxManager.OK = "&تاييد";
MessageBoxManager.Register();
MessageBox.Show("خطاي زير در عمليات تهيه فايل خروجي رخ داد:" + "\r" + Err.Message, "خطا", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.RtlReading);
MessageBoxManager.Unregister();
}
catch (FieldAccessException Err)
{
MessageBoxManager.OK = "&تاييد";
MessageBoxManager.Register();
MessageBox.Show("خطاي زير در عمليات تهيه فايل خروجي رخ داد:" + "\r" + Err.Message, "خطا", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.RtlReading);
MessageBoxManager.Unregister();
}
catch (Exception Err)
{
MessageBoxManager.OK = "&تاييد";
MessageBoxManager.Register();
MessageBox.Show("خطاي زير در عمليات تهيه فايل خروجي رخ داد:" + "\r" + Err.Message, "خطا", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.RtlReading);
MessageBoxManager.Unregister();
}
finally
{
FOut.Close();
}
#endregion //Write File
}
#endregion
#region Event on Tab Report
private void btnStart_Click(object sender, EventArgs e)
{
try
{
//check all the setting
axAdvAICtrl.ChannelScanStart = Convert.ToInt32(txtChannelStart.Text);
axAdvAICtrl.ChannelScanCount = Convert.ToInt32(txtChannelCount.Text);
int count = int.Parse(txtDataCount.Text);
// Ocx allocate the buffer of DataDigital ,equal to new object!
dataDigitalGlobal = null;
// Engage the FAI with Asychronous mode
count = axAdvAICtrl.AcquireBulkDataToMemory(count, out dataDigitalGlobal, -1, chkCylic.Checked, false);
num = 0;
// Disable all controls on the form
btnStart.Enabled = false;
// and only Enable the Stop button
btnEnd.Enabled = true;
}
catch (Exception err)
{
MessageBox.Show(err.Message, "Error");
axAdvAICtrl.StopAcquireBulkData(0);
}
}
private void btnEnd_Click(object sender, EventArgs e)
{
//stop the acquisition
axAdvAICtrl.StopAcquireBulkData(0);
// Enable all controls on the form
btnStart.Enabled = true;
// and only Disable the Stop button
btnEnd.Enabled = false;
}
#endregion
//this event every 1/500000
private void axAdvAICtrl_OnFirstHalfBulkDataReady(object sender, AxAdvAILib._IAdvAIEvents_OnFirstHalfBulkDataReadyEvent e)
{
#region "Get Data "
try
{
object analogArray = e.analogArray;
long i;
if (analogArray != null)
{
float[] voltage;
voltage = (float[])analogArray;
for (i = 0; i < Convert.ToInt32(txtDataCount.Text) / 2; i++)
{
// Write Data To Manual file
ManualSavetoFile(voltage[i], (num / axAdvAICtrl.DataSampleRate));
// Define some variables
int numberOfPointsInChart = Convert.ToInt32(txtDataCount.Text);
int numberOfPointsAfterRemoval = 1;
chaIon.Series["Series1"].Points.AddXY(xValue[arrayCounter], yValue[arrayCounter]);
// Keep a constant number of points by removing them from the left
while (chaIon.Series[0].Points.Count > numberOfPointsInChart)
{
// Remove data points on the left side
while (chaIon.Series[0].Points.Count > numberOfPointsAfterRemoval)
{
chaIon.Series[0].Points.RemoveAt(0);
}
}
chaIon.Invalidate();
num++;
}
}
}
catch (Exception err)
{
threadChart.Abort();
MessageBox.Show(err.Message, "Error");
}
#endregion
}
//this event every 1/500000
private void axAdvAICtrl_OnSecondHalfBulkDataReady(object sender, AxAdvAILib._IAdvAIEvents_OnSecondHalfBulkDataReadyEvent e)
{
#region "Get Data "
try
{
object analogArray = e.analogArray;
long i;
if (analogArray != null)
{
float[] voltage;
voltage = (float[])analogArray;
for (i = 0; i < Convert.ToInt32(txtDataCount.Text) / 2; i++)
{
// Write Data To Manual file
ManualSavetoFile(voltage[i], (num / axAdvAICtrl.DataSampleRate));
// Define some variables
int numberOfPointsInChart = Convert.ToInt32(txtDataCount.Text);
int numberOfPointsAfterRemoval = 1;
chaIon.Series["Series1"].Points.AddXY(xValue[arrayCounter], yValue[arrayCounter]);
// Keep a constant number of points by removing them from the left
while (chaIon.Series[0].Points.Count > numberOfPointsInChart)
{
// Remove data points on the left side
while (chaIon.Series[0].Points.Count > numberOfPointsAfterRemoval)
{
chaIon.Series[0].Points.RemoveAt(0);
}
}
chaIon.Invalidate();
num++;
}
}
}
catch (Exception err)
{
threadChart.Abort();
MessageBox.Show(err.Message, "Error");
}
#endregion
}
private void frmMain_FormClosing(object sender, FormClosingEventArgs e)
{
axAdvAICtrl.StopAcquireBulkData(0);
}
}
}