MVVM Command – еще один способ

 

public class TestViewModel : BaseViewModel
{
public ICommand MyCommand { get; set; }
public TestViewModel ()
{
this.MyCommand = new DelegateCommand(this.MyCommandExecuted, this.CanMyCommandCanExecuted);        
}
public void MyCommandExecuted(object param)
{
// что-то делаем
}
private bool CanMyCommandCanExecuted(object param)
{
return param != null;
}
}


или собранное в кучу на делегатах:

public ICommand MyCommand
        {
            get
            {
                return new DelegateCommand((executedParam) =>
                {
                    //executed code
                }, 
                (canExecutedParam) =>
                {
                    //CanCxecuted code
                    return true;
                }); 
            }
        }

ILMerge

ILMerge это утилита для объединения нескольких .NET сборок в одну.

 

http://www.microsoft.com/en-us/download/details.aspx?id=17630

 

пример

ilmerge /target:winexe /out:MergedApplicationExecutable.exe ApplicationExecutable.exe TelerikCommon.dll Telerik.WinControls.UI.dll Telerik.WinControls.dll

 

пример для .net 4.0

ILMerge.exe /target:winexe /targetplatform:"v4, C:\Windows\Microsoft.NET\Framework\v4.0.30319"/out:MergedApplicationExecutable.exe AppliocationExecutable.exe Telerik.WinControls.dll Telerik.WinControls.UI.dll TelerikCommon.dll

Task (async await) и Parallel в C#

Как работать с Task

var t = Task.Factory.StartNew(() => DoAction());

 

Action<object> action = (object obj) =>
{
Console.WriteLine("Task={0}, obj={1}, Thread={2}", Task.CurrentId, obj.ToString(), Thread.CurrentThread.ManagedThreadId);
};
// Создать задачу, без ее немедленного запуска
Task t1 = new Task(action, "alpha");
// Cоздать задачу и сразу запустить ее
Task t2 = Task.Factory.StartNew(action, "beta");
// дождаться завершения t2
t2.Wait();
// Запустить задачу t1 
t1.Start();
Console.WriteLine("t1 has been launched. (Main Thread={0})", Thread.CurrentThread.ManagedThreadId);
// Ждем задачу до конца.
// Вы можете дополнительно обеспечить тайм-аута или отмены маркера
// Для смягчения ситуации, когда задача занимает слишком много времени, чтобы закончить.        
t1.Wait();
// Создать задачу но не запустить ее
Task t3 = new Task(action, "gamma");
// Запустите его синхронно
t3.RunSynchronously();
// Хотя задача была выполнена синхронно, это хорошая практика, чтобы ждать его, завершения.
t3.Wait();

 

// вернуть задачу 
public Task<int> DoSome()
{
return Task.Factory.StartNew(() =>
{
Thread.Sleep(500);
return 100500;
});
}

 


Параллелизм

Parallel.Invoke(() => DoSomeWork(), () => DoSomeOtherWork());


Ссылки:

http://msdn.microsoft.com/ru-ru/library/system.threading.tasks.task.aspx

http://msdn.microsoft.com/ru-ru/library/dd537609.aspx

Makecert

Эта утилита нужна для создания сертификатов, например их можно использовать как тестовые для проверки работы SSL. Нужно запустить Developer Command Prompt (идет в комплекте с Visual Studio).


Пример:


Makecert –r –pe –n CN="www.example.com" –b 05/10/2010 –e 12/22/2011 –eku 1.3.6.1.5.5.7.3.1 –ss my –sr localmachine -sky exchange –sp "Microsoft RSA SChannel Cryptographic Provider" –sy 12 MyCertForExampleCom.cer

Эта команда создает само заверяющий сертификат, который может использоваться для тестирования веб-приложения, которое использует протокол SSL (Secure Sockets Layer) на веб-сервере, URL-адрес которого является www.example.com. OID, определяемый параметром –eku, идентифицирует этот сертификат как сертификат сервера SSL. Сертификат хранится в хранилище my и доступен на уровне компьютера (а не пользователя). Закрытый ключ сертификата можно экспортировать, сертификат действителен с 01.01.2013 до 01.01.2015 года и называется MyCertForExampleCom.cer.

Создаем сертификат

makecert -r -pe -n "CN=My Root Authority" -ss CA -sr CurrentUser   -a sha1 -sky signature -cy authority -sv CA.pvk CA.cer


Создаем серверный сертификат с экспортируемый закрытый ключ

makecert -pe -n "CN=my.server" -a sha1 -sky Exchange -eku 1.3.6.1.5.5.7.3.1 -ic CA.cer -iv CA.pvk -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12 -sv server.pvk server.cer
pvk2pfx -pvk server.pvk -spc server.cer -pfx server.pfx

pvk2pfx по умолчанию не задает пароль к  PFX выходе.  Вы должны использовать -po параметр для указания пароля.

Затем вы можете использовать. PFX файл на сервере приложения (или установить его в IIS
Для того чтобы клиенты могли доверять вашему сертификату нужно на них установить сертификат CA.cer (немного выше)

certutil -user -addstore Root CA.cer

чтобы програмно установить сертификат в IIS нужно сделать следующее:

// Предположим, “Site”  уже установлен на вашем сайте через что-то вроде
// Site site = mgr.Sites.Add(siteName, directory, 443);
X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadWrite);
// \bin\certificate.pfx, где находиться файл сертификата.
// 1234 является паролем к CertFile (экспортируемых из IIS)
X509Certificate2 certificate = new X509Certificate2(directory + @"\bin\certificate.pfx", "1234");
store.Add(certificate);
var binding = site.Bindings.Add("*:443:", certificate.GetCertHash(), store.Name);
binding.Protocol = "https";
store.Close();


Скачать MakeCert: http://download.microsoft.com/download/platformsdk/update/5.131.3617.0/nt45xp/en-us/makecert.exe
Ссылки:
http://msdn.microsoft.com/ru-ru/library/bfsktky3.aspx
http://stackoverflow.com/questions/496658/using-makecert-for-development-ssl
http://stackoverflow.com/questions/4498291/programatically-import-cert-into-iis
http://stackoverflow.com/questions/3770233/is-it-possible-to-programmatically-generate-an-x509-certificate-using-only-c