gpt4 book ai didi

c# - 具有 BindingList 和 DataGridView 的多线程 C# 应用程序

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

我有 public static class MyGlobals 用于我的应用程序范围的变量和多线程处理和更改这些变量。

public static class MyGlobals
{
public static BindingList<Device> devicesList;
public static BindingList<Device> availableList;
public static object listLock = new object();
}

我有一个 Timer 线程,更新列表的一部分(例如 Device.status 字段)和 UI 线程,其中这些列表绑定(bind)到 DataGridView 表和一些字段(例如 Device.description 字段)可以在那里手动编辑。

我的问题是,当计时器线程想要更​​新绑定(bind)列表内容时,我得到了 InvalidOperationException:

Additional information: Cross-thread operation not valid: Control 'gridView1' accessed from a thread other than the thread it was created on.

我在修改 MyGlogals 列表的每个代码块周围使用 lock(listLock) 语句,但我无法控制 DataGridView 处理列表的方式.如何使这个应用程序线程安全?

最佳答案

GUI 本身需要从 GUI 线程(主线程)更新。 .NET 提供 BackgroundWorker类就是为了这个目的。可以通过/或 ProgressChanged 与 GUI 进行通信和 RunWorkerCompleted事件,您可以在其中传递选择的对象(例如要显示的对象)。

关于c# - 具有 BindingList<T> 和 DataGridView 的多线程 C# 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18759376/

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