将列表公开用作DataGridView';是否安全;的数据源

本文关键字:是否 安全 数据源 DataGridView 列表 | 更新日期: 2024-07-27 19:35:01

我正在创建一个C#类库,它从套接字读取数据并将一些数据存储在列表中。在执行期间,此列表将每秒更改一次。

需要将此列表作为winforms应用程序的dataGridView的内容,但我想知道如何将其从库中公开。

在classLibrary中声明列表为公共列表是否安全,如:

public class THRManager
{
    public List <GaugeItem> outSource;
    ...

然后在WinForm端:

public TMRMainForm()
{
    THRManager thrC = new THRManager();
    dataGridView1.DataSource = thrC.outSource;
    ...

这安全吗?如果没有,最好的方法是什么?

Thx!

===============编辑

我应该使用DataTable还是BindingSource?

将列表公开用作DataGridView';是否安全;的数据源

使用ReadOnlyCollection,但在构造函数中或其他需要它们的地方创建一次,以免每次访问都执行new ReadOnlyCollection...

public class THRManager
{
   private List<GaugeItem> outsource;
   private ReadOnlyCollection<GaugeItem> outSourceReadOnly;
    public THRManager()
    {
        outSource = new List<GaugeItem>();
        outSourceReadOnly = new ReadOnlyCollection<GaugeItem>(outSource);
    }
    public ReadOnlyCollection<GaugeItem> OutSource 
    { 
        get { return outSourceReadOnly; } 
    }
}

希望代码在没有语法错误的情况下工作:)

发布内部集合时,这是一个更安全的选项。

private List<GaugeItem> outSource;
public ReadOnlyCollection<GaugeItem> OutSource 
{ 
    get { return new ReadOnlyCollection<GaugeItem>(outSource); } 
}