Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用数据绑定更新C#图表控件

如何使用数据绑定更新C#图表控件
EN

Stack Overflow用户
提问于 2011-09-12 15:48:22
回答 2查看 9.1K关注 0票数 3

我有一个C#图表控件,我像这样绑定数据。

代码语言:javascript
运行
AI代码解释
复制
chart.Series[0].Points.DataBindXY(xAxis, yAxis);
where xAxis is List<String> and yAxis is List<Double>

在另一个线程上,xAxis和yAxis不断更新(多次调用.Add())

但是,除非我再次调用DataBindXY(),否则图表不会更新。然而,这似乎会导致问题,因为每隔一段时间我都会收到

代码语言:javascript
运行
AI代码解释
复制
 Error: "Collection was modified; enumeration operation may not execute." 

这会导致我的程序在某些时候崩溃

代码语言:javascript
运行
AI代码解释
复制
 Error: "system.reflection.targetinvocationexception' occurred in mscorlib.dll"

-Is我在更新的时候还缺少什么吗?或者,如果您需要更多信息,请让我知道。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-12 15:53:54

您需要在更新方法 DataBindXY方法中添加锁定或同步。不能同时修改列表和读取列表,因为列表上的操作不是线程安全的。

我推荐阅读这篇关于C#中的线程同步的介绍(或许多其他介绍中的一个):http://msdn.microsoft.com/en-us/library/ms173179.aspx

编辑:这是一个如何做到这一点的例子:

代码语言:javascript
运行
AI代码解释
复制
Object lockOnMe = new Object();

... in your Add loop

(int i = 0; i < dacPoints.Count; i += 1) { 
    TimeSpan span = new TimeSpan(0, 0, i + 1); 
    lock (lockOnMe) { 
        presenter.addPoint(span.ToString(), dacPoints[i]); 
    } 
    System.Threading.Thread.Sleep(200); 
}

... when calling DataBindXY()

lock (lockOnMe) {
    // Note that I copy the lists here.  
    // This is because calling DataBindXY is not necessarily a serial, 
    // blocking operation, and you don't want the UI thread touching 
    // these lists later on after we exit the lock
    chart.Series[0].Points.DataBindXY(xAxis.ToList(), yAxis.ToList());
}
票数 3
EN

Stack Overflow用户

发布于 2011-09-12 15:59:26

图表控件读取数据源一次(当您发出DataBindXY调用时),这就是当您修改集合时它不会更新的原因。

偶尔出现问题的原因是,当图表从集合中读取时,执行更新的后台线程正在更改集合。

最好将图表轴作为在UI线程上创建的ObservableCollection。然后,您可以响应CollectionChanged事件,指示图表执行DataBindXY。

但是,为了正确使用它,您的后台线程需要调用对UI线程上的集合的添加调用。如果您有对图表控件的引用,则可以使用control.BeginInvoke调用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7390544

复制
相关文章
JavaScript 继承
什么是继承? 继承就是你爸爸很多钱,所以你就继承你爸爸,变成了富二代,也是个有钱的主,突然你爸爸世界杯赌球,输了个精光,于是你也变成了穷光蛋。这个就是继承 非也,非也。
chuchur
2022/10/25
3370
JavaScript 继承
JavaScript组合继承
组合继承(Combination Inheritance)是 JavaScript 中一种常用的继承模式,它结合了原型链继承和构造函数继承的优点。通过组合继承,我们可以使用构造函数继承来继承实例属性,并通过原型链继承来继承共享的方法和属性。
堕落飞鸟
2023/05/18
2960
Javascript 组合继承 原型链继承 寄生继承
该继承通过构造函数继承原型链的方法和父类的属性,但该方法会有两次调用父类,第一次是在继承原型链,第二次在继承属性。
菜的黑人牙膏
2019/01/21
1.1K0
JavaScript实现继承
众所周知,JavaScript 这门语言在 ES6 出来之前是没有类(class)这一概念的,所以 JavaScript 中的类都是通过原型链来实现的。同样,使用 JavaScript 也能实现面向对象的实现继承。以下是《高程》(第三版)的读书笔记。
疯狂的技术宅
2019/03/28
5210
JavaScript实现继承
使用class继承非常简单。子类使用extends关键字表明继承于哪个类,并在子类中调用super(),这相当于使用call()改变this的指向。
不作声
2020/10/30
4170
JavaScript实现继承
本文不准备深入细节,主要是对《JavaScript高级程序设计中》介绍的JS如何实现继承做一个总结,毕竟好记性不如烂笔头。文末会附带一张神图,搞清楚这张图,原型链也就没有什么问题了。
leocoder
2018/10/31
6780
实现JavaScript继承
使用TypeScript或者ES2015+标准中的extends关键字是很容易实现继承的,但这不是本文的重点。JS使用了基于原型(prototype-based)的继承方式,extends只是语法糖,本文重点在于不使用extends来自己实现继承,以进一步理解JS中的继承,实际工作中肯定还是要优先考虑使用extends关键字的。
雪飞鸿
2020/12/29
6060
Javascript继承,再谈
     说到Javascript的继承,相信只要是前端开发者都有所了解或应用,因为这是太基础的知识了。但不知各位有没有深入去理解其中的玄机与奥秘。今本人不才,但也想用自己的理解来说一说这其中的玄机和奥秘。 一、类继承的发展吏 function实现的继承 function的继承是完全模仿了OOP的编程思想。实现的是类的继承 object.create实现的继承 用object.create来修改其原型 es6的继承 增加了class来模拟OOP的继承实现。上述两种继承实现,他都还是支持的。
sam dragon
2018/03/28
8130
JavaScript对象的继承
基于原型链,即把一个对象的原型设置为另一个对象的实例,那么这个对象实例也就拥有了另一个对象上的属性。
闲花手札
2021/11/17
7550
JavaScript 面试要点: 继承
ECMA-262 把原型链定义为 ECMAScript 的主要继承方式。其基本思想就是通过原型继承多个引用类型的属性和方法。对属性和方法的搜索会一直持续到原型链的末端。
Cellinlab
2023/05/17
1920
JavaScript 面试要点: 继承
前端基础-JavaScript继承
第4章 继承 学习目标 理解什么是继承 原型继承 4.1 什么是继承 现实生活中的继承 程序中的继承 所谓的继承,其实就是在子类(子对象)能够使用父类(父对象)中的属性及方法; 赋予后辈调用祖辈资源的权限,就是继承; 4.2 原型链继承 //声明构造函数Run function Run(){ this.p = function(){ console.log(this.name+'跑'); } } //声明构造函数Man function Man(name){ this.name
cwl_java
2020/03/26
4670
简单的JavaScript继承
我想要提取这些技术的精华,以一个简单的、可复用的方式进行展示,以便使这些特性更容易不依赖其他的内容而被理解。此外我想要使其可以被简单的、高效的被使用。这里展示了一个可以使用完成后的结果来实现的实例。(译者注:既完成后的代码可以用于实现下面这个功能)
疯狂的技术宅
2019/03/27
6090
JavaScript之对象继承
该方法创建一个仅用于封装继承过程的函数,该函数在内部以某种方式来增强对象,最后再像真地是它做了所有工作一样返回对象。
laixiangran
2018/07/25
4510
Javascript 的继承总结
写惯了 TypeScript 的人很容易了解继承(extends),比如类的继承和接口的继承等,传送门:www.tslang.cn/docs/handbo… ,但是对于ES2015出现之前,JavaScript如何实现继承的呢?毫无疑问,只能通过原型链的方式实现继承,本篇主要是在读书时遇到了原型继承的问题,回顾以下原型继承的集中方式并整理成笔记方便日后查阅。
Meteors
2021/12/08
2770
javascript原型链继承
function user(names,age,jobs){ if(this instanceof user){ this.names=name; this.age=age; this.jobs=jobs; } else{ return new user(name,age,jobs) } } admin.prototype=new user(); function admin(namek,pass){ user.call(this,'jcomey','28','de
2021/11/08
6260
JavaScript继承与聚合
(1)call方法可以将一个函数的对象上下文从初始化变成由this来决定                     一个类去控制另一个类
wfaceboss
2019/04/08
7280
JavaScript继承与聚合
JavaScript原型与继承
对于使用过基于类的语言 (如 Java 或 C++) 的开发人员来说,JavaScript 有点令人困惑,因为它是动态的,并且本身不提供一个 class 实现。(在 ES2015/ES6 中引入了 class 关键字,但那只是语法糖,JavaScript 仍然是基于原型的)。
用户1428723
2020/08/06
5540
JavaScript原型链继承
在JavaScript中,每个对象都有一个原型(prototype),原型本身也是一个对象。当我们访问一个对象的属性或方法时,如果该对象本身没有该属性或方法,JavaScript会自动去它的原型对象中查找。如果原型对象也没有找到,JavaScript会继续在原型对象的原型上查找,这样形成了一个原型链。
堕落飞鸟
2023/05/17
4170
JavaScript 的继承机制(图文)
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://louluan.blog.csdn.net/article/details/19021801
亦山
2019/05/25
3410
JavaScript 面向对象继承详解
由于js不像java那样是完全面向对象的语言,js是基于对象的,它没有类的概念。所以,要想实现继承,一般都是基于原型链的方式;
书童小二
2018/09/03
5090
JavaScript 面向对象继承详解

相似问题

未捕获TypeError:对象[object Object]没有方法“”jcarousel“”

11

未捕获对象: Object [object TypeError]没有方法“”addEventlistner“”

30

未捕获对象: Object [object TypeError]没有方法“”jqEasyCounter“”

10

未捕获对象: Object [object TypeError]没有方法“”nivoSlider“”

23

未捕获TypeError:对象[object Object]没有方法“”wpdialog“”

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档