WCF сервис и клиент, запуск и создание программно

Сервер:

Uri baseAddress = new Uri(string.Format("net.tcp://127.0.0.1:{0}/ MyService", port));
ServiceHost serviceHost = new ServiceHost(typeof(MyService));

serviceHost.AddServiceEndpoint(typeof(IMyService),
	new NetTcpBinding(),
	baseAddress);

serviceHost.Open();

Клиент:

var myBinding = new BasicHttpBinding();
var myEndpoint = new EndpointAddress("http://localhost/myservice");
var myChannelFactory = new ChannelFactory<IMyService>(myBinding, myEndpoint);

IMyService client = null;

try
{
    client = myChannelFactory.CreateChannel();
    client.MyServiceOperation();
    ((ICommunicationObject)client).Close();
}
catch
{
    if (client != null)
    {
        ((ICommunicationObject)client).Abort();
    }
}

Как получить доступ к private полю класса из вне

Иногда нужно получить доступ к private полям класса, а у вас нет возможности модифицировать класс.
Это можно сделать так:

static void Main(string[] args)
{
    PrivateClass myPrivateClass = new PrivateClass();
 
    // input from ToString() at the beginning to see the content
    Console.WriteLine(myPrivateClass);
 
    FieldInfo fi = typeof(PrivateClass).GetField("_privateText", BindingFlags.NonPublic | BindingFlags.Instance);
    String valueFromPrivateField = fi.GetValue(myPrivateClass).ToString();
    Console.WriteLine("And this was read with reflection: {0}", valueFromPrivateField);
}
static void Main(string[] args)
{
    PrivateClass myPrivateClass = new PrivateClass();
 
    // input from ToString() at the beginning
    Console.WriteLine(myPrivateClass);
 
    FieldInfo fi = typeof(PrivateClass).GetField("_privateText", BindingFlags.NonPublic | BindingFlags.Instance);
    fi.SetValue(myPrivateClass, "but I''m going to change you!");
    Console.WriteLine(myPrivateClass);
}



ссылка: http://nubo-corp.com/patrick-lamber/2010/07/how-do-i-access-private-methods-properties-and-member-variable-not-controlled-by-me-in-c/

Настройка Windows Service – доступ к рабочему столу

Для этого сервис должен быть запущен он локальный учетной записи, и в инсталлере нужно прописать вот так:

[RunInstaller(true)]
    public partial class ProjectInstaller : System.Configuration.Install.Installer
    {
        public ProjectInstaller()
        {
            this.InitializeComponent();
        }

        protected override void OnCommitted(IDictionary savedState)
        {
            base.OnCommitted(savedState);

            using (RegistryKey ckey =
                Registry.LocalMachine.OpenSubKey(string.Format(@"SYSTEM\CurrentControlSet\Services\{0}", "YOURSERVICENAME"), true))
            {
                if (ckey != null && ckey.GetValue("Type") != null)
                {
                    ckey.SetValue("Type", (((int)ckey.GetValue("Type")) | 256));
                }
            }
        }
    }

Ссылка http://stackoverflow.com/questions/1945529/how-can-i-configure-my-windows-service-in-the-code-to-access-the-desktop

C# 8 способов создать поток

BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += (ob, se) => 
{
	//работа потока
	int a = 5;
};
bw.RunWorkerAsync();
System.Threading.Thread newThread;
newThread = new System.Threading.Thread(() => 
{
	//работа потока
	int a = 5;
});
newThread.Start();
new System.Threading.Thread(() => 
{
	//работа потока
	int a = 5;
}).Start();
ThreadPool.QueueUserWorkItem((obj) => 
{ 
	//работа потока
	int a = 5;
});
Parallel.Invoke(() => 
{ 
	//работа пот��ка
	int a = 5;
});
Task.Run(() =>
{
	//работа потока
	int a = 5;
});
Task t1 = new Task(() => 
{
	//работа потока
	int a = 5;
});
t1.Start();
Task t2 = Task.Factory.StartNew(() => 
{
	//работа потока
	int a = 5;
});
t2.Wait();