none
这个问题很奇怪,是稳定性的bug吗? RRS feed

  • 问题

  • public partial class Page : UserControl
        {
            public Page()
            {
                InitializeComponent();
                this.Loaded += new RoutedEventHandler(Page_Loaded);
            }
            //所有点数据
            ObservableCollection<ListLineData> LinesDataMatchID = new ObservableCollection<ListLineData>();
            //原始数据
            ObservableCollection<CustomTreeViewItem> CItemSource = new ObservableCollection<CustomTreeViewItem>()
            { new CustomTreeViewItem{spotid="1.1.1",spotvalue="26.5",spotname="Lit"},
                new CustomTreeViewItem{spotid="1.1.2",spotvalue="6.5",spotname="sales"},
                new CustomTreeViewItem{spotid="2.1.1",spotvalue="17",spotname="Nike"},
                new CustomTreeViewItem{spotid="2.1.2",spotvalue="12",spotname="Supper"}
            };
    
            string filterID="1.1.1";
    
            ObservableCollection<CustomTreeViewItem> LinesData = new ObservableCollection<CustomTreeViewItem>();
    
            void Page_Loaded(object sender, RoutedEventArgs e)
            {
                
                if (filterID.Split('.').Length == 2)
                {
                    foreach(CustomTreeViewItem ctv in CItemSource)
                    {
                        if ((ctv.spotid.Split('.')[0] + "." + ctv.spotid.Split('.')[1]) == filterID)
                        {
                            LinesData.Add(ctv);
                        }
                    }
                }
    
                if (filterID.Split('.').Length == 3)
                {
                    foreach (CustomTreeViewItem ctv in CItemSource)
                    {
                        if ((ctv.spotid.Split('.')[0] + "." + ctv.spotid.Split('.')[1] + "." + ctv.spotid.Split('.')[2]) == filterID)
                        {
                            LinesData.Add(ctv);
                        }
                    }
                }
    
                DateTime nowtime = System.DateTime.Now;
    
                foreach (CustomTreeViewItem ctv in LinesData)
                {
                    //一个新的散点图 绑定LineData类中的属性
                    ScatterSeries NewScatter = new ScatterSeries();
                    NewScatter.Title = ctv.spotname;
                    NewScatter.DependentValueBinding = new System.Windows.Data.Binding("Value");
                    NewScatter.IndependentValueBinding = new System.Windows.Data.Binding("Time");
                    //new一个点的值
                    LineData OnePoint = new LineData();
                    OnePoint.Time = nowtime;
                    OnePoint.Value = double.Parse(ctv.spotvalue);
                    //相同点的的一个列表
                    ObservableCollection<LineData> AllPoint = new ObservableCollection<LineData>();
                    AllPoint.Add(OnePoint);
                    //一个点的列表和ID匹配
                    ListLineData AllPointMatchID = new ListLineData();
                    AllPointMatchID.ID = ctv.spotid;
                    AllPointMatchID.ListLine = AllPoint;
                    //添加到所有点的集合,用ID获取
                    LinesDataMatchID.Add(AllPointMatchID);
                    //为创建的散点图赋值
                    NewScatter.ItemsSource = AllPoint;
                    //添加到一个xaml中的一个chart控件中(mychart)
                    this.mychart.Series.Add(NewScatter);
                }
    
                DispatcherTimer timer = new DispatcherTimer();
                timer.Interval = TimeSpan.FromSeconds(5);
                timer.Tick += new EventHandler(timer_Tick);
                timer.Start();
                
            }
    
            void timer_Tick(object sender, EventArgs e)
            {
                DateTime now = System.DateTime.Now;
                foreach (CustomTreeViewItem s in CItemSource)
                {
                    foreach (ListLineData lstd in LinesDataMatchID)
                    {
                        if (s.spotid == lstd.ID)
                        {
                            //控制其一个相同测点只能同时存在5个点
                            if (lstd.ListLine.Count == 5)
                            {
                                lstd.ListLine.RemoveAt(0);
                            }
                            lstd.ListLine.Add(new LineData { Time = now, Value = double.Parse(s.spotvalue) });
                        }
                    }
    
                }
            }
    
            
        }
    
        public class LineData : INotifyPropertyChanged
        {
            private DateTime _Time = new DateTime();
            private double _Value = 0;
    
            public DateTime Time
            {
                get
                {
                    return _Time;
                }
                set
                {
                    _Time = value;
                    if (PropertyChanged != null)
                    {
                        PropertyChanged(this, new PropertyChangedEventArgs("Time"));
                    }
                }
            }
            public double Value
            {
                get
                {
                    return _Value;
                }
                set
                {
                    _Value = value;
                    if (PropertyChanged != null)
                    {
                        PropertyChanged(this, new PropertyChangedEventArgs("Value"));
                    }
                }
            }
    
            #region INotifyPropertyChanged 成员
    
            public event PropertyChangedEventHandler PropertyChanged;
    
            #endregion
        }
    
        public class ListLineData : INotifyPropertyChanged
        {
            private string id = "";
            public string ID
            {
                get
                {
                    return id;
                }
                set
                {
                    id = value;
                }
            }
            private ObservableCollection<LineData> _ListLine = new ObservableCollection<LineData>();
            public ObservableCollection<LineData> ListLine
            {
                get
                {
                    return _ListLine;
                }
                set
                {
                    _ListLine = value;
                    if (PropertyChanged != null)
                    {
                        PropertyChanged(this, new PropertyChangedEventArgs("ListLine"));
                    }
                }
    
            }
    
            #region INotifyPropertyChanged 成员
    
            public event PropertyChangedEventHandler PropertyChanged;
    
            #endregion
        }
    
        public class CustomTreeViewItem
        {
            public string spotid { get; set; }
            public string spotvalue { get; set; }
            public string spotname { get; set; }
        }
    以上是程序的代码。运行一段时间后偶尔出现如下异常.....。
    {System.Exception: 异常来自 HRESULT0x88000FA8
       位于 MS.Internal.XcpImports.MethodEx(IntPtr ptr, String name, CValue[] cvData)
       位于 MS.Internal.XcpImports.MethodEx(DependencyObject obj, String name)
       位于 MS.Internal.XcpImports.UIElement_UpdateLayout(UIElement element)
       位于 System.Windows.UIElement.UpdateLayout()
       位于 Microsoft.Windows.Controls.DataVisualization.Charting.ScatterSeries.UpdateDataPoint(DataPoint dataPoint)
       位于 Microsoft.Windows.Controls.DataVisualization.Charting.DataPointSeries.UpdateAllDataPoints()
       位于 Microsoft.Windows.Controls.DataVisualization.Charting.DataPointSeriesWithAxes.UpdateAllDataPoints()
       位于 Microsoft.Windows.Controls.DataVisualization.Charting.DataPointSeriesWithAxes.UpdateAxes()
       位于 Microsoft.Windows.Controls.DataVisualization.Charting.DataPointSeriesWithAxes.OnDataPointsLoaded()
       位于 Microsoft.Windows.Controls.DataVisualization.Charting.DataPointSingleSeriesWithAxes.OnDataPointsLoaded()
       位于 Microsoft.Windows.Controls.DataVisualization.Charting.DataPointSeries.LoadDataPoints(IEnumerable`1 newItems, IEnumerable`1 oldItems)
       位于 Microsoft.Windows.Controls.DataVisualization.Charting.DataPointSeries.OnItemsSourceCollectionChanged(IEnumerable collection, NotifyCollectionChangedEventArgs e)
       位于 Microsoft.Windows.Controls.DataVisualization.Charting.DataPointSeries.ItemsSourceCollectionChanged(Object sender, NotifyCollectionChangedEventArgs e)
       位于 System.Collections.ObjectModel.ObservableCollection`1.OnCollectionChanged(NotifyCollectionChangedEventArgs e)
       位于 System.Collections.ObjectModel.ObservableCollection`1.InsertItem(Int32 index, T item)
       位于 System.Collections.ObjectModel.Collection`1.Add(T item)
       位于 Page.timer_Tick()}

    相关错误截图
    发现不能发图。我等下给个路径。。
    好像是动态库错误啊。。。。。无解中
    • 已编辑 worldman 2009年8月12日 7:14 写错了
    2009年8月11日 9:50

答案

  • 为了模拟出你出错的情况,我把时间调到1秒钟和0.1秒.都没出现异常.
    timer.Interval = TimeSpan.FromSeconds(1);

    前台代码:

    <UserControl xmlns:chartingToolkit="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit"  x:Class="SilverlightApplication21.Page"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
                 xmlns:control="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls"
        Width="400" Height="300">
        <Grid x:Name="LayoutRoot" Background="White">
           
            <chartingToolkit:Chart x:Name="mychart"></chartingToolkit:Chart>
            
        </Grid>
    </UserControl>
    



    我把你的代码拿去做了测试,没有出现问题:


    努力!写一个js解析器,一个svg插件,一个绘图程序,做好自己,呵呵~!
    • 已标记为答案 worldman 2009年8月13日 8:41
    2009年8月12日 5:01
    版主

全部回复

  • 为了模拟出你出错的情况,我把时间调到1秒钟和0.1秒.都没出现异常.
    timer.Interval = TimeSpan.FromSeconds(1);

    前台代码:

    <UserControl xmlns:chartingToolkit="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit"  x:Class="SilverlightApplication21.Page"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
                 xmlns:control="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls"
        Width="400" Height="300">
        <Grid x:Name="LayoutRoot" Background="White">
           
            <chartingToolkit:Chart x:Name="mychart"></chartingToolkit:Chart>
            
        </Grid>
    </UserControl>
    



    我把你的代码拿去做了测试,没有出现问题:


    努力!写一个js解析器,一个svg插件,一个绘图程序,做好自己,呵呵~!
    • 已标记为答案 worldman 2009年8月13日 8:41
    2009年8月12日 5:01
    版主
  • 我也纳闷啊。。兄弟。
    有时候一天就出现一次。。
    据说在vsita系统下出现的平凡点。。。

    导致页面白屏。。。   哎哎。。!
    2009年8月12日 7:18
  • 我用的是vista home版.
    可能是别人机器上的SL插件的问题或者是你用的toolkit的问题吧!
    努力!写一个js解析器,一个svg插件,一个绘图程序,做好自己,呵呵~!
    2009年8月12日 7:20
    版主
  • 就是不明白这是什么原因导致的。
    报错 提示
    异常来自 HRESULT0x88000FA8
    位于 MS.Internal.XcpImports.MethodEx(IntPtr ptr, String name, CValue[] cvData)
       位于 MS.Internal.XcpImports.MethodEx(DependencyObject obj, String name)
       位于 MS.Internal.XcpImports.UIElement_UpdateLayout(UIElement element)
       位于 System.Windows.UIElement.UpdateLayout()
       位于 Microsoft.Windows.Controls.DataVisualization.Charting.ScatterSeries.UpdateDataPoint(DataPoint dataPoint)
       位于 Microsoft.Windows.Controls.DataVisualization.Charting.DataPointSeries.UpdateAllDataPoints()
       位于 Microsoft.Windows.Controls.DataVisualization.Charting.DataPointSeriesWithAxes.UpdateAllDataPoints()
       位于 Microsoft.Windows.Controls.DataVisualization.Charting.DataPointSeriesWithAxes.UpdateAxes()
       位于 Microsoft.Windows.Controls.DataVisualization.Charting.DataPointSeriesWithAxes.OnDataPointsLoaded()
       位于 Microsoft.Windows.Controls.DataVisualization.Charting.DataPointSingleSeriesWithAxes.OnDataPointsLoaded()
       位于 Microsoft.Windows.Controls.DataVisualization.Charting.DataPointSeries.LoadDataPoints(IEnumerable`1 newItems, IEnumerable`1 oldItems)
       位于 Microsoft.Windows.Controls.DataVisualization.Charting.DataPointSeries.OnItemsSourceCollectionChanged(IEnumerable collection, NotifyCollectionChangedEventArgs e)
       位于 Microsoft.Windows.Controls.DataVisualization.Charting.DataPointSeries.ItemsSourceCollectionChanged(Object sender, NotifyCollectionChangedEventArgs e)
       位于 System.Collections.ObjectModel.ObservableCollection`1.OnCollectionChanged(NotifyCollectionChangedEventArgs e)
       位于 System.Collections.ObjectModel.ObservableCollection`1.InsertItem(Int32 index, T item)
       位于 System.Collections.ObjectModel.Collection`1.Add(T item)
       位于 Page.timer_Tick()}



    这这  。。。我怎么定位?

    请教下。 出这种问题  我如何调试。追踪什么原因。。学习了。
    2009年8月12日 7:20
  • 你用一个try catch在:

    void timer_Tick(object sender, EventArgs e)

    努力!写一个js解析器,一个svg插件,一个绘图程序,做好自己,呵呵~!
    2009年8月12日 7:25
    版主
  • 我就是用try ctach 捕获的。不然就会直接白屏了... 要是能报的是 未将对象引用到实例之类的 我都还可以调试... 这问题怎么办啊 。? 项目这么赶 。。呼呼 ! 上次还牵扯到一个布局循环的问题. 死活也没找出来是什么原因。 也是在 chart内创建一个曲线的时候为其图例title属性赋值。 一个静态引用的值。。(和这扯上什么关系) 然后又时候就报了 布局循环的问题。。 要是同时创建的2条曲线的话就没事。。。 郁闷。! 更有趣的是 我将其title属性赋值一个固定的英文值的时候就没问题。创建成功! 要是赋值一个中文就出问题。。。 怎么这么多问题出在我这里。晕了 呵呵。。重新下载toolkit 去
    2009年8月12日 10:44
  • 嗯!你重新下一个试试!因为去年的toolkit有一些bug,今年7月都修正过了!
    如果你是商业应用最好是买第三方的控件用吧!


    努力!写一个js解析器,一个svg插件,一个绘图程序,做好自己,呵呵~!
    2009年8月13日 1:13
    版主
  • 下载了新的组件貌似真把问题解决了.
    可惜新的组件中 independentValueBinding 绑定时间时无法自动调整到最小单元。
    比如我如以上代码设置发现点全绘制在一起。。下面的最小时间单位为天。只有2009-8-13 2009-8-14这样的时间单位。


    请问楼上有其他版本吗 ? 自动调整时间最小单位的 。
    或者当前版本如何解决这样一个问题。  我下载的是 2009 7月版本的。。
    谢谢。
    2009年8月13日 7:06
  • 我的也是7月的
    努力!写一个js解析器,一个svg插件,一个绘图程序,做好自己,呵呵~!
    2009年8月13日 7:28
    版主
  • 你的用哪个7月份的  没有进过什么设置吗?
    我看到图片上。你是定时一秒刷新一次。
    然后就看到横向绑定的坐标轴的时间最小刻度是一秒哦。

    为什么我的是一天。 然后10秒刷新一次的  就是一条直线。  郁闷。。

    麻烦楼上把你用的那个dll文件发到我邮箱行吗 ? 用qq邮箱发送 。。不然我还收不到。。(邮件屏蔽了某些邮箱系统)
    zhuwenteng@xbrother.com

    2009年8月13日 8:40

  • 哦!我想测试出看是不是有bug,我把时间还为1秒钟一次
    努力!写一个js解析器,一个svg插件,一个绘图程序,做好自己,呵呵~!
    2009年8月14日 0:24
    版主