我正在处理一个应用程序,但一切正常,但出现异常
枚举尚未开始或已经完成。
这是我的生成此异常的代码。
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<DateTime>("DateRecorded"),
}.date).ToList();
var Rate = (from dr in lineDS.Tables[0].AsEnumerable()
select new
{
rate = dr.Field<double>(SelectedItems[i])
}.rate).ToList();
var datesDataSource = new EnumerableDataSource<DateTime>(dates);
datesDataSource.SetXMapping(x => dateAxis.ConvertToDouble(x));
var RateDataSource = new EnumerableDataSource<double>(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;
}
在上面的代码中
1.)SelectedItems是一个数组列表,其中包含用户在运行时选择的列名称。
2.)DatelineData是一种用于获取垂直列日期的方法。
3.)GraphLineDraw是一种用于获取列值的方法。
这是我的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();
}
}
这是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();
}
}
请帮忙。
更新:异常堆栈跟踪
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.<GetPoints>d__0.MoveNext()
at Microsoft.Research.DynamicDataDisplay.CoordinateTransformExtensions.<DataToViewport>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.Dispatcher.PushFrameImpl(DispatcherFrame frame)
at System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
at System.Windows.Threading.Dispatcher.Run()
at System.Windows.Application.RunDispatcher(Object ignore)
at System.Windows.Application.RunInternal(Window window)
at System.Windows.Application.Run(Window window)
at System.Windows.Application.Run()
at IntelOptics_Vicksburg.App.Main() in C:\Documents and Settings\pc\Desktop\24-05-2012PM\Inteloptics Report Codes\IntelOptics_Reports\IntelliOptics Reports\obj\x86\Debug\App.g.cs:line 0
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(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.Threading.ThreadHelper.ThreadStart()
最佳答案
通过dates
将它们传递到Rate
之前,请检查集合plotter.AddLineGraph
和compositeDataSourceSenssor
的长度是否相同。
if (dates.Count() != Rate.Count())
{
// serious problem:
// won't work, since there are X values without Y values or vice versa
}
而且,就像我在评论中说的那样,您应该真正使用
using
语句private DataSet DatelineData(...)
{
using(var connection = new SqlConnection(settings))
{
SqlParameter colomNamePrm, startdatePrm, EnddatePrm, StartPrm, EndPrm;
connection.Open();
using (var command = connection.CreateCommand())
{
....
return dateDs;
}
}
}
摆脱讨厌的try / catch / finally块并自动调用
Dispose
。编辑:我再次检查并相应地更改了答案。