[SIZE=2][COLOR=#0000ff][FONT=Courier New]static [/FONT][/COLOR][/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2] Main([/SIZE][SIZE=2][COLOR=#0000ff]string[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New][] args)[/FONT][/SIZE]
[SIZE=2][FONT=Courier New]{[/FONT][/SIZE]
[FONT=Courier New][SIZE=2][COLOR=#008080] CustomDelegate[/COLOR][/SIZE][SIZE=2] methods = [/SIZE][SIZE=2][COLOR=#0000ff]new [/COLOR][/SIZE][SIZE=2][COLOR=#008080]CustomDelegate[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New](Method1);[/FONT][/SIZE]
[SIZE=2][FONT=Courier New] methods += [/FONT][/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]new[/COLOR][/SIZE][SIZE=2][COLOR=#008080]CustomDelegate[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New](Method2);[/FONT][/SIZE]
[FONT=Courier New][SIZE=2][COLOR=#008080] IAsyncResult[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] result =[/FONT][/SIZE]
[SIZE=2][FONT=Courier New]methods.BeginInvoke([/FONT][/SIZE][FONT=Courier New][SIZE=2][COLOR=#800000]"Hello, world"[/COLOR][/SIZE][SIZE=2], [/SIZE][SIZE=2][COLOR=#0000ff]new [/COLOR][/SIZE][SIZE=2][COLOR=#008080]AsyncCallback[/COLOR][/SIZE][SIZE=2](AsyncCallbackHandler), [/SIZE][SIZE=2][COLOR=#0000ff]null[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New]);[/FONT][/SIZE]
[SIZE=2][COLOR=#008000][FONT=Courier New] //Some code[/FONT][/COLOR][/SIZE]
[SIZE=2][FONT=Courier New] methods.EndInvoke(result);[/FONT][/SIZE]
[SIZE=2][FONT=Courier New]}[/FONT][/SIZE]
[FONT=Courier New][SIZE=2][COLOR=#0000ff]static [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2] AsyncCallbackHandler([/SIZE][SIZE=2][COLOR=#008080]IAsyncResult[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] result)[/FONT][/SIZE]
[SIZE=2][FONT=Courier New]{[/FONT][/SIZE]
[FONT=Courier New][SIZE=2][COLOR=#008080] Console[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New].WriteLine(result.IsCompleted);[/FONT][/SIZE]
[SIZE=2][FONT=Courier New]}[/FONT][/SIZE]
[FONT=Courier New][SIZE=2][COLOR=#0000ff]delegate [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]void [/COLOR][/SIZE][SIZE=2][COLOR=#008080]CustomDelegate[/COLOR][/SIZE][SIZE=2]([/SIZE][SIZE=2][COLOR=#0000ff]object[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] value);[/FONT][/SIZE]
[FONT=Courier New][SIZE=2][COLOR=#0000ff]static [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2] Method1([/SIZE][SIZE=2][COLOR=#0000ff]object[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] value)[/FONT][/SIZE]
[SIZE=2][FONT=Courier New]{[/FONT][/SIZE]
[FONT=Courier New][SIZE=2][COLOR=#0000ff] lock[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] (value)[/FONT][/SIZE]
[FONT=Courier New][SIZE=2][COLOR=#008080] Console[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New].WriteLine(value.GetHashCode());[/FONT][/SIZE]
[SIZE=2][FONT=Courier New]}[/FONT][/SIZE]
[FONT=Courier New][SIZE=2][COLOR=#0000ff]static [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2] Method2([/SIZE][SIZE=2][COLOR=#0000ff]object[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] value)[/FONT][/SIZE]
[SIZE=2][FONT=Courier New]{[/FONT][/SIZE]
[FONT=Courier New][SIZE=2][COLOR=#0000ff] lock[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] (value)[/FONT][/SIZE]
[FONT=Courier New][SIZE=2][COLOR=#008080] Console[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New].WriteLine(value);[/FONT][/SIZE]
[SIZE=2][FONT=Courier New]}[/FONT][/SIZE]
Можно ли в C# одновременно запускать несколько методов
Помогите пожалуйста , как при создании проекта в форме винды одновременно запускать несколько методов. Например: первый метод что -то рисует в форме, я нажимаю на кнопку и одновременно с ним запускается другой метод. Как можно такое реализовать ?:confused: :confused: :confused:
ThreadPool.QueueUserWorkItem или что-то такое
Чтоб одновременно выполнять несколько действий, нужно запустить несколько потоков. Для этого в .Net Framework есть классы Thread и ThreadPool.
Можешь использовать класс Delegate и его асинхронные методы BeginInvoke и EndInvoke в сочетании с System.Threading namespace. Если ты работаешь с потоко незащищенными компонентами, то могут возникнуть проблемы. К примеру, если ты хочешь выводить из потока в TextBox (который был создан не этим потоком) какую-то информацию, то нужно возвращать управление потоку создавшему этот TextBox. Это можно сделать, используя AsyncOperation класс. В MSDN есть примеры, смотри, могу посоветовать книжку Andrew Troelsen - Pro C# 2005 and the .NET 2.0 Platform и глава Building Multithreaded Applications (есть на
Спасибо за советы, буду пробовать !!!
Вот простейший пример запуска параллельно двух функций: