2009-07-23 12 views
0

J'ai deux méthodes qui fonctionnent ensemble et ils font un grand double tableau (tous les 1/1000000S 5000 article) et ce tableau devrait montrer un tableau (graphique Dundas). Mais le graphique ne se met pas à jour.aide mise à jour graphique

Aidez-moi s'il vous plaît!

Désolé pour mon mauvais anglais!

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

Pouvez-vous fournir un exemple de code? –

+0

Essayez de poster du code, nous ne pouvons pas vraiment savoir ce qui se passe jusqu'à ce que nous en voyions. – AlbertoPL

+0

Un exemple de code serait utile. – AnthonyWJones

Répondre

1

En règle générale, toute mise à jour des composants de l'interface utilisateur doivent être effectués sur le thread d'interface utilisateur, par l'intermédiaire Control.Invoke (ou l'équivalent WPF). Il est possible que vos modifications provoquent des exceptions qui sont avalées quelque part.

Votre code fonctionne-t-il dans le fil de l'interface utilisateur? Vous pouvez toujours utiliser un BackgroundWorker - vous avez juste besoin de faire les mises à jour (idéalement par lots) via Invoke.