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

aave

Print Friendly, PDF & Email

Для измерения времени выполнения кода лучше не использовать метод DateTime.Now(). Лучше воспользоваться классом StopWatch. Это даст более адекватное значение, т.к. этот класс требует меньше накладных расходов на свою работу.

    Dim sw As New System.Diagnostics.Stopwatch()
    sw.Start()
    … выполнение кода, который мы хотим измерить …
    sw.Stop()
    Console.Write(sw.Elapsed)
Print Friendly, PDF & Email
Подробнее ...
Print Friendly, PDF & Email

В приложениях Windows Forms была возможность определить каталог, из которого запускалось приложение, так:

    Dim startup As String = Application.StartupPath

В WPF данная возможность не работает. Теперь для определения текущей директории приложения нужно вызвать следующий код:

    Dim startup As String = System.AppDomain.CurrentDomain.BaseDirectory
Print Friendly, PDF & Email
Подробнее ...
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
Подробнее ...
Подписаться на этот канал RSS