2009-07-23 14 views
0

私は一緒に働く2つの方法があり、大きなダブルアレイ(1/1000000S 5000アイテムごと)を作成し、この配列にチャート(ダンダースチャート)を表示する必要があります。 しかし、グラフは更新されていません。ヘルプ更新チャート

私を助けてください!

私の悪い英語のために申し訳ありません!

この私のコード:

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); 
     } 
    } 
} 
+0

サンプルコードを提供できますか? –

+0

投稿コードを試してみてください。私たちが何かを見るまで、何が起こっているのか分かりません。 – AlbertoPL

+0

いくつかのコードの例が役に立ちます。 – AnthonyWJones

答えて

1

は典型的には、UIコンポーネントへの更新はControl.Invoke(またはWPF相当)を介して、UIスレッドで行われるべきです。あなたの変更がどこかで飲み込まれている例外を引き起こしている可能性があります。

あなたのコードはUIスレッドに対応していますか? BackgroundWorkerを使用することができます。Invokeで更新を行うだけです(理想的にはバッチで)。

関連する問題