2013-12-05 2 views
0

Я создаю библиотеку классов C#, которая считывает данные из сокета и сохраняет некоторые данные в списке. Этот список будет меняться больше раз в секунду во время выполнения.Можно ли сделать список общедоступным для использования в качестве источника данных DataGridView?

В этом списке необходимо указать dataGridView приложения winforms, но мне интересно, как я могу разоблачить его из своей библиотеки.

Безопасно ли объявить список общедоступными в ClassLibrary как:

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

, а затем на стороне WinForm:

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

Является ли это безопасно? Если нет, то какой лучший способ?

Thx!

================== EDIT

Должен ли я использовать DataTable или BindingSource?

+1

Wheres BindingSource участие? – Ralf

+0

Я редактировал, чтобы быть списком, но в основном вопрос не меняется (возможно, гораздо более точный) – Pizzaboy

+0

Похоже, что единственное, кому разрешено изменять список, должно быть THRManager, поэтому было бы лучше опубликовать список как ReadOnlyList через Имущество. – Ralf

ответ

2

Используйте 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; } 
    } 
} 

Надежда код работает без синтаксических ошибок :)

+0

Нужно ли переписывать dataGrid каждый раз, когда происходит изменение? – Pizzaboy

+1

@Pizzaboy Извините ... очень поздно ответ ... нет, вам не нужно снова связывать его. – Dummy01

1

Это более безопасный вариант при публикации внутренней коллекции.

private List<GaugeItem> outSource; 

public ReadOnlyCollection<GaugeItem> OutSource 
{ 
    get { return new ReadOnlyCollection<GaugeItem>(outSource); } 
} 
+0

Извините, я снова отредактировал этот вопрос, потому что я начал задавать вопрос в словаре – Pizzaboy

+0

Я также обновился, чтобы удовлетворить ваши требования. –

Смежные вопросы