Багатонитковість

Більш рекомендована бібліотека Task

Можуть працювати після закриття програми

ThreadPool

Синхронізація потоків

Без параметра

Thread a = new Thread(new ThreadStart(F1));

// Почати 

a.Start();

// Пауза

a.Suspend();

// Продовжити

a.Resume();

// Зупинити потік

a.Abort();

for (int i = 0; i < 5; i++)

{

     new Thread(F1).Start();

}

[ Приклад ]

З параметром

Thread thread = new Thread(new ParameterizedThreadStart(F1));

thread.Start(4);

void F1(object a) {

    int c = (int)a;

}

Фоновий (працює після закриття програми)

new Thread(F1) { IsBackground = true }.Start();

Фоновий, з найвищім приоритетом для процесора

new Thread(F1) { IsBackground = true, Priority = ThreadPriority.Highest }.Start();

Очікувати на закінчення усіх потоків

for (int i = 0; i < th.Count; i++)

     {

          th[i].Join();

     }

Отримати tb1.Text в потоці WPF

void F1()

{

     string text = "";

     System.Windows.Application.Current.Dispatcher.Invoke(

          DispatcherPriority.Normal, 

          (ThreadStart)delegate { text = tb1.Text; });

            MessageBox.Show(text);

}

Записати в tb1.Text з потоку WPF

this.Dispatcher.Invoke(() => {

     tb1.Text = "Ok";

});

Get для компонент форми WinForm

try

{

     Thread potok1 = new Thread(new ThreadStart(F1));

     potok1.SetApartmentState(ApartmentState.STA);

     potok1.Start();

}

catch

{

}

void F1()

{

     MessageBox.Show(textBox1.Text);

}

new Thread (() => {MessageBox.Show("1");}).Start();