Программная реализация кодера свёрточного кода и декодера по алгоритму Витерби
Опубликовано в Программирование
Опубликовано в Программирование
Опубликовано в Программирование
Измерительная аппаратура компании Rohde&Schwarz – это профессиональная аппаратура, которая используется в рабочих процессах на многих предприятиях по всему миру. Зачастую необходимо обеспечивать удалённый доступ и управление измерениями и режимами работы измерительной аппаратуры. Для этого у приборов Rohde&Schwarz есть, как правило, несколько возможностей. Одна из них – интерфейс RSIB. Рассмотрим его подробнее.
Опубликовано в Полезные советы
Наблюдаемые коллекции ObservableCollection в WPF можно изменять толкько в потоке пользовательского интерфейса. Однако можно несколько изменить данную коллекцию таким образом, чтобы можно было это делать из фонового потока. Например, вот так:
Imports System Imports System.Collections.Generic Imports System.Collections.ObjectModel Imports System.Collections.Specialized Imports System.Diagnostics Imports System.Windows.Threading Public Class ObservableCollectionThreadSafe(Of T) Inherits ObservableCollection(Of T) 'наследуем от наблюдаемой коллекции 'Переопределяем событие изменения коллекции Public Shadows Event CollectionChanged As NotifyCollectionChangedEventHandler #Region "КОНСТРУКТОРЫ" Public Sub New() MyBase.New() End Sub Public Sub New(items As IEnumerable(Of T)) MyBase.New(items) End Sub #End Region '/КОНСТРУКТОРЫ Protected Overrides Sub OnCollectionChanged(e As NotifyCollectionChangedEventArgs) Using MyBase.BlockReentrancy() 'используем BlockReentrancy(), который запрещает выполнение повторных попыток изменения коллекции Dim eventHandler As NotifyCollectionChangedEventHandler = Me.CollectionChangedEvent If (eventHandler IsNot Nothing) Then Dim delegates As [Delegate]() = eventHandler.GetInvocationList() For Each handler As NotifyCollectionChangedEventHandler In delegates 'идём по списку вызовов Dim dispatcherObject As DispatcherObject = TryCast(handler.Target, DispatcherObject) If (dispatcherObject IsNot Nothing) AndAlso (Not dispatcherObject.CheckAccess()) Then 'Если подписчик - DispatcherObject И другой поток dispatcherObject.Dispatcher.Invoke(DispatcherPriority.DataBind, handler, Me, New Object() {e}) 'вызываем обработчик в целевом потоке диспетчера Else handler(Me, e) 'иначе запускаем обработчик как есть End If Next End If End Using End Sub End Class
Опубликовано в Программирование
Опубликовано в Полезные советы
В .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 можно добавить методы для удаления, вставки или перемещения набора элементов коллекции.
Опубликовано в Программирование
Опубликовано в Полезные советы
Рекомендую при написании кода в Visual Studio на VB.NET всегда использовать жёсткую проверку соответствия типов, которая задаётся директивой Option Strict. При создании нового проекта с настройками среды по умолчанию, используется нестрогая проверка. Чтобы каждый раз не менять данную директиву в свойствах проекта, её можно поменять в настройках Visual Studio: Options — Projects and Solutions — VB Defaults — Option Strict
Опубликовано в Полезные советы
Проверить, является ли класс MyClass2 потомком класса MyClass1, можно так:
GetType(MyClass2).IsSubclassOf(GetType(MyClass1))