WPF NotifyIcon

Библиотека для отображения иконки в трее, всплывающих окошек и т.п. Можно устанавливать через NuGet.
http://www.hardcodet.net/projects/wpf-notifyicon
http://www.codeproject.com/Articles/36468/WPF-NotifyIcon

Найдено в этом обсуждении (Как свернуть окно в трей)
http://www.cyberforum.ru/wpf-silverlight/thread550534.html

Запуск стороннего приложения

using System.Diagnostics;
 
Process.Start("IExplore.exe", "http://infobs.athn.ru/");

Блог давно не ведется, но ссылка пусть будет.
http://alex-comments.blogspot.ru/2011/02/wpf_13.html

Открыть страничку в браузере, установленном по умолчанию

System.Diagnostics.Process.Start("http://infobs.athn.ru/");

Таймер

System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
dispatcherTimer.Interval = new TimeSpan(0,0,1);
dispatcherTimer.Start();


private void dispatcherTimer_Tick(object sender, EventArgs e)
{
  // code goes here
}

http://stackoverflow.com/questions/5410430/wpf-timer-like-c-sharp-timer

Сравнение объектов в списках

Задача: есть два списка объектов одного типа. Объекты могут повторяться. Нужно взять из второго списка только те объекты, которых нет в первом.

var newArticles = allArticles.Except(oldArticles, new ArticleEqualityComparer());

ArticleEqualityComparer реализован по примеру с MSDN:
http://msdn.microsoft.com/ru-ru/library/ms132151.aspx

class BoxEqualityComparer : IEqualityComparer
{

    public bool Equals(Box b1, Box b2)
    {
        if (b1.Height == b2.Height & b1.Length == b2.Length
                            & b1.Width == b2.Width)
        {
            return true;
        }
        else
        {
            return false;
        }
    }


    public int GetHashCode(Box bx)
    {
        int hCode = bx.Height ^ bx.Length ^ bx.Width;
        return hCode.GetHashCode();
    }

}

Continue Reading →

WPF сохранение настроек в App.config

Два примера (почти как один), которые у меня почему-то не захотели работать (настройки по-прежнему сохраняются только в памяти). Буду разбираться.

Configuration oConfig = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
oConfig.AppSettings.Settings["PreferenceToRemember"].Value = “NewValue”;
oConfig.Save(ConfigurationSaveMode.Full);
ConfigurationManager.RefreshSection(”appSettings”);

http://stackoverflow.com/questions/305529/how-to-update-appsettings-in-a-wpf-app

exePath = Path.Combine( exePath, "MyApp.exe" );
    Configuration config = ConfigurationManager.OpenExeConfiguration( exePath );
    var setting = config.AppSettings.Settings[SettingKey];
    if (setting != null)
    {
        setting.Value = newValue;
    }
    else
    {
        config.AppSettings.Settings.Add( SettingKey, newValue);
    }

    config.Save();

http://stackoverflow.com/questions/3638754/how-can-i-read-write-app-config-settings-at-runtime-without-using-user-settings

Атрибуты файлов

using System;
using System.IO;
using System.Text;

class Test 
{
    public static void Main() 
    {
        string path = @"c:\temp\MyTest.txt";

        // Create the file if it does not exist.
        if (!File.Exists(path)) 
        {
            File.Create(path);
        }

        if ((File.GetAttributes(path) & FileAttributes.Hidden) == FileAttributes.Hidden) 
        {
            // Show the file.
            File.SetAttributes(path, FileAttributes.Archive);
            Console.WriteLine("The {0} file is no longer hidden.", path);

        } 
        else 
        {
            // Hide the file.
            File.SetAttributes(path, File.GetAttributes(path) | FileAttributes.Hidden);
            Console.WriteLine("The {0} file is now hidden.", path);
        }
    }
}

Получение данных из БД

Найдено в старых файлах

OleDbConnection thisConnection = new OleDbConnection(
     @"Provider = Microsoft.Jet.OLEDB.4.0; Data Source=");
thisConnection.Open();//открыть соединение с БД
OleDbCommand Comm = thisConnection.CreateCommand();
Comm.CommandText ="select distinct  from  where  not in (select distinct  from )";
OleDbDataReader dbr = Comm.ExecuteReader();
    while (dbr.Read())
    {
           //работа с данными, полученными из БД
           //объект dbr возвращает данные из БД построчно, т.е. на каждой 
           //итерации цикла осуществляется работа с одной строкой таблицы, а
           //в данном случае – с одним значением корня дерева. Если у дерева 
           //нет ни одного корня (т.е. запрос не возвращает ни одного 
           //значения), ни одной итерации цикла не совершается.
           //Конкретное значение корня можно получить следующим образом:
           //dbr[""] или dbr[0] – в этом случае возвращаемое 
           //значение будет иметь тип odject. Приведение типа осуществляется 
           //сдедующим образом: ()dbr[""]
    }
dbr.Close();
thisConnection.Close();//закрыть соединение с БД

     В тексте запроса  - имя столбца, соответствующего элементам – предкам,  - имя столбца, соответствующего элементам – потомкам,  - имя таблица БД.