вторник, 29 января 2013 г.

Путь джедая...

С середины 2012 года Microsoft обновила свою программу сертификации. Теперь система статусов выглядит более понятной.
Предлагаю вашему вниманию сводную талицу по всем доступным сертификациям. Выберите свой путь к успеху!


пятница, 18 января 2013 г.

Task Extensions в помощь

При разработке пользовательского интерфейса очень часто возникают ситуации, когда требуется получить некторые данные из различных источников (база данных, web-сервис, wcf-сервис и т.д.). При этом хорошим тоном будет отображать пользователю, что приложение выполняет запрос, а не "вешать" приложение до окончания выполнения операции. Соответственно выход из этой ситуации - запускать процессы получения данных в отдельных потоках.



Помимо того, что иногда будет требоваться передать данные в поток, так их еще нужно получить обратно в UI-поток и обработать, если есть, возникшие во время запроса ошибки. Задача не из простых. Но если использовать класс Task из .NET Framework 4, то задача немного упрощается, так как специально для этого класса я сделал несколько методов расширений, которые очень помогают в решении вышеописанных задач:

четверг, 17 января 2013 г.

WIX + NET 4.0 Framework + Microsoft Windows Installer 3.1

Очень часто, перед установкой программы, требуется проверить наличие нужных в системе компонентов. В данной статье я покажу как в WIX проверить наличие установленного NET Framework 4.0 и Microsoft Windows Installer 3.1.
Для начала создадим новый проект Windows Installer XML с говорящим названием - Setup. Добавим в наш проект файл Variables.wxi, в котором будут содержаться переменные, описывающие параметры нашего приложения:

Variables.wxi:
<?xml version="1.0" encoding="utf-8"?>
<Include>
  <?define ProductName="WPFCSHARP Program"?>
  <?define ProductVersion="1.0.0.0" ?>
  <?define ProductCode="A5C649E2-7180-401C-A188-B23A4E766432"?>
  <?define UpgradeCode="90BCED71-26CD-483E-AE93-0DB3510B7313"?>
  <?define Manufacturer="WPFCSHARP"?>
</Include>
Обратите внимание, что уникальные идентификаторы в вашем приложении должы быть другими. Для генерации GUID'ов в VIsual Studio используйте утилиту, которая находится в меню Сервис >> Создать GUID.

Затем изменим главный файл в проекте Product.wxs следующим образом:

Product.wxs :
  <?include Variables.wxi?>

  <Product Id="$(var.ProductCode)" Name="$(var.ProductName)" Language="1049" Version="$(var.ProductVersion)" Manufacturer="$(var.Manufacturer)" UpgradeCode="$(var.UpgradeCode)">

среда, 9 января 2013 г.

Как "звучит" Garbage Collector?

Читая книгу Джеффри Рихтера "CLR via C#. Программирование на платформе Microsoft .NET Framework 4.0 на языке C#", я наткнулся на интересный класс.

Code:
    internal sealed class GCBeep
    {
        ~GCBeep()
        {
            Console.Beep();
            if (!AppDomain.CurrentDomain.IsFinalizingForUnload() && !Environment.HasShutdownStarted)
                new GCBeep();
        }
    }

Этот код примечателен тем, что во время вызова деструктора класс воспроизводит звуковой сигнал, и если приложение еще не завершено, создает новый экземпляр себя же. Теперь если мы просто создадим экземпляр этого класса, то каждый раз, когда будет запускаться Garbage Collector, будет воспроизводится звуковой сигнал (так как этот класс каждый раз будет "подметаться" GC).