Рейтинг@Mail.ru
aave

aave

Print Friendly, PDF & Email

В .NET есть такой перечислимый тип как ObservableCollection. Его особенность в том, что эта коллекция при изменении её элементов (добавлении или удалении), уведомляет наблюдающие за ней классы об этом изменении. Это бывает полезно, например, когда к данной коллекции привязаны элементы пользовательского интерфейса. Но если необходимо добавить в коллекцию сразу множество элементов, то добавление каждого элемента будет уведомлять об изменении коллекции каждый раз. Это вызовет избыточную нагрузку на пользовательский интерфейс, и он может даже зависнуть на какое-то время. Чтобы этого избежать, можно написать свой собственный класс, который будет наследовать от ObservableCollection и содержать метод добавления множества элементов за один раз, а уведомлять об этом единожды. Вот как например это можно сделать:

Imports System.Collections.Specialized

''' <summary>
''' ObservableCollection с поддержой добавления множества элементов.
''' </summary>
Public Class ObservableRangeCollection(Of T)
    Inherits ObjectModel.ObservableCollection(Of T)

#Region "CTORs"

    Public Sub New()
        MyBase.New()
    End Sub

    Public Sub New(collection As IEnumerable(Of T))
        MyBase.New(collection)
    End Sub

#End Region '/CTORs

#Region "METHODS"

    ''' <summary>
    ''' Добавляет в коллекцию несколько элементов и в конце уведомляет об этом.
    ''' </summary>
    Public Sub AddRange(collection As IEnumerable(Of T))
        For Each item As T In collection
            Items.Add(item)
        Next
        OnCollectionChanged(New NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, collection))
    End Sub

#End Region '/METHODS

End Class

По аналогии с методом AddRange можно добавить методы для удаления, вставки или перемещения набора элементов коллекции.

Print Friendly, PDF & Email
Подробнее ...
Print Friendly, PDF & Email

Как известно, среда .NET позволяет запускать процесс с параметрами. Есть несколько интересных особенностей, о которых хочется упомянуть. Например, чтобы получать уведомление о завершении вызванного процесса, следует явно его включить:

Dim proc As New Process With {
    .EnableRaisingEvents = True 
}

А теперь можно назначить обработчик события завершения процесса:

AddHandler proc.Exited, Sub()
                            Console.WriteLine("The process has exited!")
                        End Sub

Также можно запустить процесс, не используя стандартную консоль CMD.exe, а перенаправив вывод в запускающее приложение:

Dim psi As New ProcessStartInfo() With {
                .UseShellExecute = False,
                .RedirectStandardOutput = True,
                .RedirectStandardInput = True
}
Dim proc As New Process With { .StartInfo = psi }
Print Friendly, PDF & Email
Подробнее ...

Как подключить панель со светодиодами WS2812 (WS2812B)

Опубликовано в Электроника

Print Friendly, PDF & Email
Рассмотрим подключение светодиодной ленты или панели со светодиодами WS2812/WS2812B, принцип и особенности их работы, а также управление панелью с помощью микросхемы FT2232H по интерфейсу SPI.
Print Friendly, PDF & Email
Подробнее ...
Подписаться на этот канал RSS