Enumerarea nu a început sau a fost deja terminată

Sunt de lucru pe o aplicație totul funcționează bine, dar eu sunt obtinerea de excepție

Enumeration has either not started or has already finished.

Aici este codul meu care generează această excepție.

 for (int i = 0; i < SelectedItems.Count; i++)
                {
                    lineDS = new DataSet();
                    datDs = new DataSet();
                    datDs = DatelineData(SelectedItems[i].ToString(), Starttime, Endtime, NUDTextBox, txtSensorLess, dtpStartDate, dtpEndDate);
                    lineDS =GraphlineDraw(SelectedItems[i].ToString(),Starttime,Endtime,NUDTextBox,txtSensorLess,dtpStartDate,dtpEndDate);
                    if (datDs.Tables[0].Rows.Count > 0 & lineDS.Tables[0].Rows.Count > 0)
                    {
                        var dates = (from dr in datDs.Tables[0].AsEnumerable()
                                     select new
                                     {
                                         date = dr.Field("DateRecorded"),
                                     }.date).ToList();

                        var Rate = (from dr in lineDS.Tables[0].AsEnumerable()
                                    select new
                                    {
                                        rate = dr.Field(SelectedItems[i])
                                    }.rate).ToList();
                        var datesDataSource = new EnumerableDataSource(dates);
                        datesDataSource.SetXMapping(x => dateAxis.ConvertToDouble(x));
                        var RateDataSource = new EnumerableDataSource(Rate);
                        RateDataSource.SetYMapping(y => y);
                        CompositeDataSource compositeDataSourceSenssor = new CompositeDataSource(datesDataSource, RateDataSource);
                        plotter.AddLineGraph(compositeDataSourceSenssor, colors[i], 1, SelectedItems[i]);
                        //Items.Add(new ItemVM((Brush)converter.ConvertFromString(colors[i].ToString()), SelectedItems[i]));
                    }
                    plotter.LegendVisible = false;
                    //listview.ItemsSource = Items;
                }

În codul de mai sus

1.) SelectedItems este un arrayist care contine numele de coloane selectate de utilizator la momentul executiei.

2.) DatelineData este o metodă care se utilizează pentru a obține datele coloanei perticulare.

3.) GraphLineDraw este o metodă utilizată pentru a obține valorile coloanelor.

Aici este metoda mea DatelineData:

 private DataSet DatelineData(string items, string Starttime, string Endtime, string NUDTextBox, string txtSensorLess, string dtpStartDate, string dtpEndDate)
    {
        try
        {                               
                SqlParameter colomNamePrm, startdatePrm, EnddatePrm, StartPrm, EndPrm;                                        
                connection = new SqlConnection(settings);
                connection.Open();
                DataSet dateDs = new DataSet();
                command = new SqlCommand();
                command.Connection = connection;
                command.CommandType = CommandType.StoredProcedure;
                command.CommandText = "GetAvgDate";
                colomNamePrm = new SqlParameter("@ColumnName", SqlDbType.VarChar);
                startdatePrm = new SqlParameter("@StartDate", SqlDbType.VarChar);
                EnddatePrm = new SqlParameter("@EndDate", SqlDbType.VarChar);
                StartPrm = new SqlParameter("@Start", SqlDbType.VarChar);
                EndPrm = new SqlParameter("@End", SqlDbType.VarChar);
                colomNamePrm.Value =items;
                startdatePrm.Value = dtpStartDate +" " + Starttime;
                EnddatePrm.Value = dtpEndDate + " " + Endtime;
                StartPrm.Value = NUDTextBox;
                EndPrm.Value = txtSensorLess;
                command.Parameters.Add(colomNamePrm);
                command.Parameters.Add(startdatePrm);
                command.Parameters.Add(EnddatePrm);
                command.Parameters.Add(StartPrm);
                command.Parameters.Add(EndPrm);
                adapter.SelectCommand = command;
                adapter.Fill(dateDs); 

            return dateDs;
        }
        catch (Exception ex) { throw ex; }
        finally
        {
            command.Dispose();
            adapter.Dispose();
            connection.Close();
        }
    }

Și aceasta este metoda GraphLineDraw

  private DataSet GraphlineDraw(string selecteditem, string Starttime, string Endtime, string NUDTextBox, string txtSensorLess, string dtpStartDate, string dtpEndDate)
    {
        try
        {                                              
                SqlParameter colomNamePrm, startdatePrm, EnddatePrm, StartPrm, EndPrm;                                         
                connection = new SqlConnection(settings);
                connection.Open();
                DataSet objds = new DataSet();
                command = new SqlCommand();
                command.Connection = connection;
                command.CommandType = CommandType.StoredProcedure;
                command.CommandText = "getAvgColumn";
                colomNamePrm = new SqlParameter("@ColumnName", SqlDbType.VarChar);
                startdatePrm = new SqlParameter("@StartDate", SqlDbType.VarChar);
                EnddatePrm = new SqlParameter("@EndDate", SqlDbType.VarChar);
                StartPrm = new SqlParameter("@Start", SqlDbType.VarChar);
                EndPrm = new SqlParameter("@End", SqlDbType.VarChar);
                colomNamePrm.Value =selecteditem;
                startdatePrm.Value = dtpStartDate + " " + Starttime;
                EnddatePrm.Value = dtpEndDate + " " + Endtime;
                StartPrm.Value = NUDTextBox;
                EndPrm.Value = txtSensorLess;
                command.Parameters.Add(colomNamePrm);
                command.Parameters.Add(startdatePrm);
                command.Parameters.Add(EnddatePrm);
                command.Parameters.Add(StartPrm);
                command.Parameters.Add(EndPrm);
                adapter.SelectCommand = command;
                adapter.Fill(objds);                    

            return objds;
        }
        catch (Exception ex) { throw ex; }
        finally
        {
            command.Dispose();
            adapter.Dispose();
            connection.Close();
        }
    }

vă rugăm să vă ajutați urgent.

UPDATE : Exception Stack Trace

 at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
   at System.Collections.Generic.List`1.Enumerator.System.Collections.IEnumerator.get_Current()
   at Microsoft.Research.DynamicDataDisplay.DataSources.EnumerablePointEnumerator`1.GetCurrent(Point& p)
   at Microsoft.Research.DynamicDataDisplay.DataSources.CompositeDataSource.CompositeEnumerator.GetCurrent(Point& p)
   at Microsoft.Research.DynamicDataDisplay.DataSources.DataSourceHelper.d__0.MoveNext()
   at Microsoft.Research.DynamicDataDisplay.CoordinateTransformExtensions.d__0.MoveNext()
   at Microsoft.Research.DynamicDataDisplay.BoundsHelper.GetDataBounds(IEnumerable`1 points)
  at Microsoft.Research.DynamicDataDisplay.BoundsHelper.GetViewportBounds(IEnumerable`1 dataPoints, DataTransform transform)
  at Microsoft.Research.DynamicDataDisplay.LineGraph.UpdateCore()
 at Microsoft.Research.DynamicDataDisplay.ViewportElement2D.Update()
   at Microsoft.Research.DynamicDataDisplay.ViewportElement2D.OnOutputChanged(Rect newRect, Rect oldRect)
   at Microsoft.Research.DynamicDataDisplay.LineGraph.OnOutputChanged(Rect newRect, Rect oldRect)
   at Microsoft.Research.DynamicDataDisplay.ViewportElement2D.OnViewportPropertyChanged(Object sender, ExtendedPropertyChangedEventArgs e)
   at System.EventHandler`1.Invoke(Object sender, TEventArgs e)
   at Microsoft.Research.DynamicDataDisplay.Viewport2D.RaisePropertyChangedEvent(DependencyPropertyChangedEventArgs e)
   at Microsoft.Research.DynamicDataDisplay.Viewport2D.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
   at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)
   at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata,         EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue,        OperationType operationType)
 at System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal)
   at System.Windows.DependencyObject.SetValue(DependencyPropertyKey key, Object value)
   at Microsoft.Research.DynamicDataDisplay.Viewport2D.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
   at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)
   at System.Windows.FrameworkElement.OnRenderSizeChanged(SizeChangedInfo sizeInfo)
   at Microsoft.Research.DynamicDataDisplay.Viewport2D.OnRenderSizeChanged(SizeChangedInfo sizeInfo)
   at System.Windows.ContextLayoutManager.fireSizeChangedEvents()
   at System.Windows.ContextLayoutManager.UpdateLayout()
   at System.Windows.ContextLayoutManager.UpdateLayoutCallback(Object arg)
   at System.Windows.Media.MediaContext.InvokeOnRenderCallback.DoWork()
   at System.Windows.Media.MediaContext.FireInvokeOnRenderCallbacks()
   at System.Windows.Media.MediaContext.RenderMessageHandlerCore(Object resizedCompositionTarget)
   at System.Windows.Media.MediaContext.RenderMessageHandler(Object resizedCompositionTarget)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate        catchHandler)
   at System.Windows.Threading.DispatcherOperation.InvokeImpl()
   at System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object state)
   at System.Threading.ExecutionContext.runTryCode(Object userData)
   at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
 at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Windows.Threading.DispatcherOperation.Invoke()
   at System.Windows.Threading.Dispatcher.ProcessQueue()
   at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate        catchHandler)
   at System.Windows.Threading.Dispatcher.InvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32        numArgs)
   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
   at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
   at System.Windows.Threading.Di
2
@CodingBarfield ok o voi face :-)
adăugat autor Sunny, sursa
@CodingBarfield acesta este codul deja tăiat cu codul esențial, dar dacă aveți vreo îndoială, atunci voi clarifica.
adăugat autor Sunny, sursa
@DavidBrabant da încerc.
adăugat autor Sunny, sursa
@daryal verificați acum actualizarea.
adăugat autor Sunny, sursa
@CodingBarfield vă rugăm să verificați actualizarea acum.
adăugat autor Sunny, sursa
Folosiți folosind instrucțiunile în loc să încercați/capturați/în cele din urmă. Și nu aruncați excepțiile capturate cu aruncați ex , o simplă aruncare va face. Și dacă doar răsturnați aceste excepții, este mai bine să nu le prindeți în general ...
adăugat autor sloth, sursa
@CodingBarfield Aflați mai multe despre acele bune practici de codificare de la stackoverflow.com/questions/75401/uses-of-using-in-c-sharp și această stackoverflow.com/questions/730250/… întrebări.
adăugat autor sloth, sursa
@Sunny Am editat răspunsul meu
adăugat autor sloth, sursa
În ce linie crește excepția?
adăugat autor daryal, sursa
eliminați încercați blocul de blocare și vedeți exact ce linie aruncă excepția.
adăugat autor Eren Ersönmez, sursa
@Sunny unul dintre putinele lucruri pe care le putem face de la distanta. Nu pot testa codul pe mașina mea locală și nu există erori evidente. Dacă schimbați codul pentru a pur și simplu utiliza o listă în locul unui set de date de pe server, obținem ceva pe care îl putem testa/executa la nivel local și vă ajutăm să depanați mai repede.
adăugat autor CodingBarfield, sursa
Aveți un multithreading mergând unul și sunteți sigur că nu se întâmplă nicio excepție neascultată. De asemenea, postați stacktrace-ul excepției.
adăugat autor CodingBarfield, sursa
Puteți elimina pur și simplu piese/linii simple ale codului până când aveți ceva care funcționează. Actualul cod este foarte greu de depanat de la distanță.
adăugat autor CodingBarfield, sursa
@dkson O sugestie fara o explicatie nu va ajuta. Explicați de ce sugerați sau rămâneți pe subiect.
adăugat autor CodingBarfield, sursa

2 răspunsuri

Verificați dacă colecțiile dvs. dates și Rate au aceeași lungime înainte de a le transmite plotter.AddLineGraph > compositeDataSourceSenssor .

if (dates.Count() != Rate.Count())
{
   //serious problem:
   //won't work, since there are X values without Y values or vice versa
}

Și, așa cum am spus în comentariul meu, ar trebui să folosiți într-adevăr folosind

private DataSet DatelineData(...)
{
    using(var connection = new SqlConnection(settings))
    {
         SqlParameter colomNamePrm, startdatePrm, EnddatePrm, StartPrm, EndPrm;                                        
         connection.Open();
         using (var command = connection.CreateCommand())
         {
             ....
             return dateDs;
         }
    }
}

pentru a scăpa de urâtul încercați/capturați/blocați în cele din urmă și apelați automat Dispose .

EDIT: I checked again and changed my answer accordingly.

7
adăugat
Vroia să vă mulțumesc pentru asta! Ma ajutat foarte mult!
adăugat autor Bubo, sursa
da ai dreptate
adăugat autor Sunny, sursa

Această problemă apare de obicei atunci când MoveNext este sunat de două ori pe ultimul rând. MoveNext este apelat când enumerator sa încheiat.

0
adăugat
dar în cod nu-l folosesc.
adăugat autor Sunny, sursa
adăugat autor Sunny, sursa
așa cum pot să depășesc acest lucru?
adăugat autor Sunny, sursa
Ai reușit să vezi MoveNext în cod?
adăugat autor Sunny, sursa
traseul pe care l-ați furnizat are acest lucru la Microsoft.Research.DynamicDataDisplay.DataSources.DataSource & zwnj; Helper. d_ & zwnj; _0.MoveNext() la Microsoft.Research.DynamicDataDisplay.CoordinateTransformExt & zwnj; ensions. d__0.MoveNext ()“
adăugat autor Ebad Masood, sursa
Se numește indirect. Nu prin codul tău. verificați metodele de urmărire chiar sub liniile pe care le-am lipit și vedeți cum se numește. Pentru mine arata ca o metoda de afisare.
adăugat autor Ebad Masood, sursa
Care linie provoacă o excepție. intrați în fiecare dintre metodele pe care le-ați scris și vedeți linia exactă.
adăugat autor Ebad Masood, sursa