Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将列表作为DataGridView公开是否安全;什么是数据源?_C#_Winforms_Datagridview_Datatable_Bindingsource - Fatal编程技术网

C# 将列表作为DataGridView公开是否安全;什么是数据源?

C# 将列表作为DataGridView公开是否安全;什么是数据源?,c#,winforms,datagridview,datatable,bindingsource,C#,Winforms,Datagridview,Datatable,Bindingsource,我正在创建一个C#类库,它从套接字读取数据并将一些数据存储在列表中。在执行期间,此列表将每秒更改一次以上 需要将此列表作为winforms应用程序的dataGridView的内容,但我想知道如何将其从库中公开出来 在类库中将列表声明为公共是否安全,如: public class THRManager { public List <GaugeItem> outSource; ... 这安全吗?如果没有,最好的方法是什么 谢谢 =====================

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

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

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

public class THRManager
{
    public List <GaugeItem> outSource;
    ...
这安全吗?如果没有,最好的方法是什么

谢谢

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


我应该使用DataTable还是BindingSource?

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

private List<GaugeItem> outSource;

public ReadOnlyCollection<GaugeItem> OutSource 
{ 
    get { return new ReadOnlyCollection<GaugeItem>(outSource); } 
}
私有列表外包;
公共只读集合外包
{ 
获取{返回新的只读集合(外包);}
}

发布内部收藏时,这是一个更安全的选项

private List<GaugeItem> outSource;

public ReadOnlyCollection<GaugeItem> OutSource 
{ 
    get { return new ReadOnlyCollection<GaugeItem>(outSource); } 
}
私有列表外包;
公共只读集合外包
{ 
获取{返回新的只读集合(外包);}
}

发布内部收藏时,这是一个更安全的选项

private List<GaugeItem> outSource;

public ReadOnlyCollection<GaugeItem> OutSource 
{ 
    get { return new ReadOnlyCollection<GaugeItem>(outSource); } 
}
私有列表外包;
公共只读集合外包
{ 
获取{返回新的只读集合(外包);}
}

发布内部收藏时,这是一个更安全的选项

private List<GaugeItem> outSource;

public ReadOnlyCollection<GaugeItem> OutSource 
{ 
    get { return new ReadOnlyCollection<GaugeItem>(outSource); } 
}
私有列表外包;
公共只读集合外包
{ 
获取{返回新的只读集合(外包);}
}

使用一个
ReadOnlyCollection
,但在构造函数中或任何需要的地方创建一次,以避免每次访问它时都执行
新的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; } 
    }
}
公共类管理员
{
私人名单外包;
私人只读收集外包;
公共管理员()
{
外包=新列表();
outsourceradonly=新的只读集合(outSource);
}
公共只读集合外包
{ 
获取{return outsourceradonly;}
}
}

希望代码不会出现语法错误:)

使用一个
ReadOnlyCollection
,但在构造函数中或任何需要的地方创建一次,以避免每次访问它时都执行
新建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; } 
    }
}
公共类管理员
{
私人名单外包;
私人只读收集外包;
公共管理员()
{
外包=新列表();
outsourceradonly=新的只读集合(outSource);
}
公共只读集合外包
{ 
获取{return outsourceradonly;}
}
}

希望代码不会出现语法错误:)

使用一个
ReadOnlyCollection
,但在构造函数中或任何需要的地方创建一次,以避免每次访问它时都执行
新建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; } 
    }
}
公共类管理员
{
私人名单外包;
私人只读收集外包;
公共管理员()
{
外包=新列表();
outsourceradonly=新的只读集合(outSource);
}
公共只读集合外包
{ 
获取{return outsourceradonly;}
}
}

希望代码不会出现语法错误:)

使用一个
ReadOnlyCollection
,但在构造函数中或任何需要的地方创建一次,以避免每次访问它时都执行
新建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; } 
    }
}
公共类管理员
{
私人名单外包;
私人只读收集外包;
公共管理员()
{
外包=新列表();
outsourceradonly=新的只读集合(outSource);
}
公共只读集合外包
{ 
获取{return outsourceradonly;}
}
}


希望代码不会出现语法错误:)

BindingSource涉及到什么?我将其编辑为一个列表,但基本上这个问题并没有变化(可能更有意义),听起来似乎唯一允许更改列表的应该是Thrmager,所以最好通过属性将列表发布为ReadOnlyList。不需要DataTable。如果外包将绑定到多个控件,那么将BindingSource放在两个控件之间可能会有所帮助。BindingSource涉及到什么?我编辑了一个列表,但基本上这个问题没有变化(可能更有意义)听起来唯一允许更改列表的应该是THRManager,因此最好通过属性将列表发布为ReadOnlyList。不需要DataTable。如果外包将绑定到多个控件,那么将BindingSource放在两个控件之间可能会有所帮助。BindingSource涉及到什么?我编辑了一个列表,但基本上这个问题没有变化(可能更有意义)听起来唯一允许更改列表的应该是THRManager,因此最好通过属性将列表发布为ReadOnlyList。不需要DataTable。如果外包将绑定到多个控件,那么将BindingSource放在两个控件之间可能会有所帮助。BindingSource涉及到什么?我编辑了一个列表,但基本上这个问题没有变化(可能更有意义)听起来唯一允许更改列表的应该是THRManager,因此最好通过属性将列表发布为ReadOnlyList。不需要DataTable。如果外包将绑定到多个控件,将BindingSource放在两者之间可能会有所帮助。抱歉,我再次编辑了问题,因为我是在字典中开始提问的。对不起,我再次编辑了问题,因为我是在字典中开始提问的。对不起,我再次编辑了该问题,因为我是在字典中开始提问的。对不起,我再次编辑了该问题,因为我是在字典中开始提问的。每次发生更改时,我是否需要重新绑定数据网格?@Pizzaboy抱歉。。。很晚才回答。。。不,您不必再次绑定。每次发生更改时,我是否需要重新绑定数据网格?@Pizzaboy抱歉。。。很晚才回答。。。没有