Рейтинг@Mail.ru

Распаковка файла из ресурсов в директорию приложения

Published in Полезные советы

Часто в приложении бывает необходимо использовать объёмные ресурсы, например, динамические библиотеки. Их можно включить в ресурсы приложения в сжатом виде. .NET имеет встроенный архиватор GZip. Его можно использовать, например, так:

''' 
''' Проверяет наличие необходимых DLL в текущей директории и при отсутствии создаёт.
''' 
Private Sub CheckDlls()
    Dim dlls As New Dictionary(Of String, Byte()) From {
        {"myLib1.dll", My.Resources.myLib1},
        {"myLib2.dll", My.Resources.myLib2}
    }
    For Each dll In dlls
        If (Not IO.File.Exists(dll.Key)) Then
            Using compressed As New IO.MemoryStream(dll.Value),
            gzStm As New IO.Compression.GZipStream(compressed, IO.Compression.CompressionMode.Decompress),
            decompressed As IO.FileStream = IO.File.Create(dll.Key)

                gzStm.CopyTo(decompressed)

            End Using
        End If
    Next

End Sub
Читать далее...

Преобразовать Color в Brush в .NET

Published in Полезные советы

Как преобразовать в .NET Color в Brush? Просто:

Private Shared Function ColorToBrush(clr As System.Drawing.Color) As Brush
	Dim rgb As Integer = clr.ToArgb()
    Dim color = System.Windows.Media.Color.FromArgb(CByte(rgb >> 24 And &HFF), CByte(rgb >> 16 And &HFF), CByte(rgb >> 8 And &HFF), CByte(rgb And &HFF))
    Dim brsh As New SolidColorBrush(color) 
    Return brsh
End Function    
Читать далее...

Как завершить консольное приложение .NET с заданным кодом

Published in Полезные советы

Чтобы вернуть при завершении консольного приложения числовой код с результатом выполнения приложения есть несколько способов:

  1. объявить метод Main() с возвращаемым типом Integer;
  2. при завершении программы вызвать метод Environment.Exit(code).

Код завершения, естественно, желательно сделать перечислением для удобства, если интересуют подробности более чем успешно/неуспешно.

Читать далее...

Реализация интерфейса 1-Wire на микросхемах FTDI

Published in Программирование

С интерфейсом 1-Wire мы сталкиваемся ежедневно: он применяется для чтения ключей-«таблеток» от домофона. Микросхемы фирмы FTDI (FT2232, FT4232 и другие) не поддерживают реализацию интерфейса 1-Wire «из коробки». Но программно можно реализовать его самостоятельно. Чем и займёмся в статье.
Читать далее...

Запрет выделения элементов ListBox / ListView (WPF)

Published in Полезные советы

Чтобы запретить выделение элементов элемента ListBox или ListView, можно определить это с помощью такого стиля:

<ListBox.ItemContainerStyle>
    <Style TargetType="ListBoxItem">
         <Setter Property="Focusable" Value="False" />
    </Style>
</ListBox.ItemContainerStyle>

Второй вариант – использовать вместо ListBox элемент ItemsControl.

Читать далее...

Измерение времени выполнения кода в .NET

Published in Полезные советы

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

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

Нюансы запуска процесса в .NET

Published in Полезные советы

Как известно, среда .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 }
Читать далее...
Subscribe to this RSS feed