gpt4 book ai didi

c# - 从线程更新数据绑定(bind) DataTable 是否安全?

转载 作者:行者123 更新时间:2023-11-30 22:27:05 25 4
gpt4 key购买 nike

对于我正在处理的项目,我有一个表单,其中包含一组要显示一些数据的 DataGridView 组件。每个 DataGridView 都有自己的与之关联的 DataTable。要显示的数据会定期发送。我的应用程序必须读取此数据、解析它并相应地填充数据网格。因为我想保持表单的响应能力,所以我在无休止的后台 worker 中实现了数据接收(阻塞)。

在后台工作人员中,我获取数据并将其解析/转换为适合数据表的值。现在这是我的问题:目前我将这些值直接分配给 DataTable 对象。 (所以我在后台工作人员的 DoWork 事件中执行此操作)

我想知道这是否有效。我确实有一次索引越界异常,我想知道这是否与此有关。这是一种安全且值得推荐的方法吗,还是我应该在我的后台工作人员的 DoWork 事件中使用调用来更新数据表?

最佳答案

不,.NET WinForm 控件上影响控件呈现的所有属性(这是假设)(包括绑定(bind)到会影响呈现的控件的值)必须在创建控件的线程上进行。

就是说,很多时候您可以进行更改,但这种行为是不可预测的,因此不推荐这样做。

在您的具体情况下,我建议您准备一份 DataTable处理线程与之一起工作,然后将该副本编码到 UI 线程(通过调用 ISynchronizeInvoke interface 实现之一,Control class 实现)并更新 UI 线程中的网格。

基本上,您将使用从后台线程编码的副本对网格绑定(bind)到的 DataTable 执行更新。

关于c# - 从线程更新数据绑定(bind) DataTable 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11434894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com