{"id":505,"date":"2017-04-27T01:49:20","date_gmt":"2017-04-26T21:49:20","guid":{"rendered":"http:\/\/infobs.athn.ru\/?p=505"},"modified":"2017-04-27T01:49:20","modified_gmt":"2017-04-26T21:49:20","slug":"materialyi-po-yazyiku-c-sharp","status":"publish","type":"post","link":"https:\/\/infobase.athn.ru\/program\/2017\/04\/materialyi-po-yazyiku-c-sharp\/","title":{"rendered":"\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u043f\u043e \u044f\u0437\u044b\u043a\u0443 C#"},"content":{"rendered":"<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0445<br \/>\n\u041e\u0442\u0441\u044e\u0434\u0430: <a href=\"http:\/\/math.msu.su\/~vvb\/2course\/Borisenko\/AddEdu\/CSharp\/CSharp.html\">http:\/\/math.msu.su\/~vvb\/2course\/Borisenko\/AddEdu\/CSharp\/CSharp.html<\/a><br \/>\n<!--more--><\/p>\n<h3>\n\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435<br \/>\n<\/h3>\n<ol>\n<li>\n    <a href=\"#Hello\">\u041f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0430\u044f \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430<\/a>\n    <\/li>\n<li>\n    <a href=\"#Clock\">\u041f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0430\u044f \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430<\/a>\n    <\/li>\n<li>\n    <a href=\"#Delegates\">\u0414\u0435\u043b\u0435\u0433\u0430\u0442\u044b (delegate)<\/a>\n    <\/li>\n<li>\n    <a href=\"#Events\">\u0421\u043e\u0431\u044b\u0442\u0438\u044f (event)<\/a>\n    <\/li>\n<li>\n    <a href=\"#Threads\">\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435: \u043d\u0438\u0442\u0438 (Threads)<\/a>\n    <\/li>\n<li>\n    <a href=\"#Sync\">\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0438\u0442\u0435\u0439 \u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432<\/a><\/p>\n<ul>\n<li>\n        <a href=\"#NonSync\">\u041f\u0440\u0438\u043c\u0435\u0440 \u043d\u0435\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b<\/a>\n        <\/li>\n<li>\n        <a href=\"#Monitor\">\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043b\u0430\u0441\u0441\u0430 Monitor<\/a>\n        <\/li>\n<li>\n        <a href=\"#lock\">\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430 &#171;lock&#187;<\/a>\n        <\/li>\n<li>\n        <a href=\"#ReaderWriterLock\">\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0442\u0438\u043f\u0430 ReaderWriterLock<\/a>\n        <\/li>\n<li>\n        <a href=\"#SyncEvents\">\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0442\u0438\u043f\u0430<br \/>\n        AutoResetEvent \u0438 ManualResetEvent<\/a>\n        <\/li>\n<\/ul>\n<\/li>\n<li>\n    <a href=\"#Files\">\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438<\/a>\n    <\/li>\n<\/ol>\n<h3>\n<a name=\"Hello\"><br \/>\n1. \u041f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0430\u044f \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430<br \/>\n<\/a><br \/>\n<\/h3>\n<p>\n\u041e\u0431\u044b\u0447\u043d\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 \u043d\u043e\u0432\u043e\u043c<br \/>\n\u044f\u0437\u044b\u043a\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f &#171;Hello, world!&#187;.<br \/>\n\u041c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443,<br \/>\n\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0435\u0447\u0442\u0430\u0435\u0442 \u043d\u0430 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f.<\/p>\n<pre>\nusing System;\nclass ShowTime\n{\n    static int Main(string[] args)\n    {\n        Console.WriteLine(\"Current time: {0}\", DateTime.Now);\n        return 0;\n    }\n}\n<\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c &#171;System&#187; &#8212; \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438\u043c\u0435\u043d (namespace),<br \/>\n\u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0441\u044f \u0432\u0441\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b.<br \/>\n\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0435\u0434\u0438\u043d\u0438\u0446\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043b\u0430\u0441\u0441, \u0432<br \/>\n\u044f\u0437\u044b\u043a\u0435 C# \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u0441\u0442\u0438\u043b\u0435 \u044f\u0437\u044b\u043a\u0430 C.<br \/>\n\u0412\u043c\u0435\u0441\u0442\u043e \u043d\u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f<br \/>\n<strong>\u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435<\/strong> \u043c\u0435\u0442\u043e\u0434\u044b \u043a\u043b\u0430\u0441\u0441\u043e\u0432,<br \/>\n\u0442.\u0435. \u043c\u0435\u0442\u043e\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438.<br \/>\n\u0412 \u043d\u0430\u0448\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u043c\u044b \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043a\u043b\u0430\u0441\u0441 &#171;ShowTime&#187;.<br \/>\n\u041c\u0435\u0442\u043e\u0434 &#171;Main&#187; &#8212; \u044d\u0442\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u0435\u0442\u043e\u0434 \u043a\u043b\u0430\u0441\u0441\u0430,<br \/>\n\u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b.<br \/>\n(\u041c\u0435\u0442\u043e\u0434 &#171;Main&#187; \u043e\u0431\u044f\u0437\u0430\u043d \u0431\u044b\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e<br \/>\n\u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0438\u043a\u0430\u043a\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0435\u0449\u0435 \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u044b!)\n<\/p>\n<p>\n&#171;Console&#187; &#8212; \u044d\u0442\u043e \u043a\u043b\u0430\u0441\u0441 \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u0438\u043c\u0435\u043d &#171;System&#187;,<br \/>\n\u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0439 \u0437\u0430 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0439 \u0432\u0432\u043e\u0434-\u0432\u044b\u0432\u043e\u0434.<br \/>\n\u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u0435\u0442\u043e\u0434 &#171;WriteLine&#187; \u043a\u043b\u0430\u0441\u0441\u0430 &#171;Console&#187; \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 \u0442\u0435\u043a\u0441\u0442<br \/>\n\u0438 \u0437\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442 \u043a\u0443\u0440\u0441\u043e\u0440 \u0432 \u043d\u0430\u0447\u0430\u043b\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u0438.<br \/>\n\u041f\u0435\u0440\u0432\u044b\u0439 \u0430\u0433\u0440\u0443\u043c\u0435\u043d\u0442 \u043c\u0435\u0442\u043e\u0434\u0430 &#171;WriteLine&#187; &#8212; \u044d\u0442\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430,<br \/>\n\u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0444\u043e\u0440\u043c\u0430\u0442\u0430<br \/>\n\u0432\u0438\u0434\u0430 {n}, \u0433\u0434\u0435 n &#8212; \u0447\u0438\u0441\u043b\u0430 0, 1, 2, &#8230; \u0412\u043c\u0435\u0441\u0442\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432<br \/>\n\u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435<br \/>\n\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u043c\u0435\u0442\u043e\u0434\u0430. \u0412\u043c\u0435\u0441\u0442\u043e &#171;{0}&#187;<br \/>\n\u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430, \u0432\u043c\u0435\u0441\u0442\u043e &#171;{1}&#187; &#8212;<br \/>\n\u0442\u0440\u0435\u0442\u044c\u0435\u0433\u043e \u0438 \u0442.\u0434.\n<\/p>\n<p>\n\u0421\u043b\u043e\u0436\u043d\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 &#171;DateTime.Now&#187;.<br \/>\n&#171;DateTime&#187; &#8212; \u044d\u0442\u043e \u043a\u043b\u0430\u0441\u0441, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0439 \u0437\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<br \/>\n&#171;Now&#187; &#8212; \u044d\u0442\u043e \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0435 &#171;<strong>\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e<\/strong>&#187;<br \/>\n\u043a\u043b\u0430\u0441\u0441\u0430 (&#171;property&#187;). &#171;\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u043e&#187; \u043a\u043b\u0430\u0441\u0441\u0430 \u0432 \u044f\u0437\u044b\u043a\u0435 C# &#8212; \u044d\u0442\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0430\u044f<br \/>\n\u0432\u043e\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f-\u0447\u043b\u0435\u043d \u043a\u043b\u0430\u0441\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043d\u0435\u0442,<br \/>\n\u0430 \u0435\u0441\u0442\u044c \u0432\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 &#171;get&#187; \u0438 &#171;set&#187;.<br \/>\n\u041f\u0435\u0440\u0432\u044b\u0439 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0443, \u0432\u0442\u043e\u0440\u043e\u0439 &#8212;<br \/>\n\u043f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430. \u0418\u0437\u0432\u043d\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f<br \/>\n\u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f. \u0415\u0441\u043b\u0438 \u043c\u0435\u0442\u043e\u0434 &#171;set&#187; \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442, \u0442\u043e \u044d\u0442\u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e<br \/>\n\u043c\u043e\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0438\u0442\u0430\u0442\u044c, \u043d\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0442\u044c \u0435\u0439 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<br \/>\n\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 &#171;Now&#187; \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<\/p>\n<pre>\npublic class DateTime {\n    . . .\n    public static DateTime Now {\n        get {\n            \/\/ \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\n            \/\/ \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \"res\"\n            \/\/ . . .\n            return res; \/\/ \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\n        }\n        \/\/ \u041c\u0435\u0442\u043e\u0434 \"set\" \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442, \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \"Now\"\n        \/\/ \u043c\u043e\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0438\u0442\u0430\u0442\u044c!\n    }\n    . . .\n}\n<\/pre>\n<\/p>\n<h3>\n<a name=\"Clock\"><br \/>\n2. \u041f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0430\u044f \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430<br \/>\n<\/a><br \/>\n<\/h3>\n<p>\n\u0410\u0440\u0445\u0438\u0432-\u0444\u0430\u0439\u043b<br \/>\n&#171;<a href=\"projects\/Hello.tgz\">Hello.tgz<\/a>&#187;<br \/>\n\u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 Microsoft.NET, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0439<br \/>\n\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 &#171;\u0427\u0430\u0441\u044b&#187;. \u042d\u0442\u043e \u043e\u043a\u043e\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0438\u0441\u0443\u0435\u0442<br \/>\n\u0446\u0438\u0444\u0435\u0440\u0431\u043b\u0430\u0442 \u0441 \u0434\u0432\u0438\u0436\u0443\u0449\u0438\u043c\u0438\u0441\u044f \u0441\u0442\u0440\u0435\u043b\u043a\u0430\u043c\u0438 &#8212; \u0447\u0430\u0441\u043e\u0432\u043e\u0439, \u043c\u0438\u043d\u0443\u0442\u043d\u043e\u0439 \u0438<br \/>\n\u0441\u0435\u043a\u0443\u043d\u0434\u043d\u043e\u0439. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435<br \/>\n\u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 (\u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0442\u0438\u043f\u0430 &#171;Label&#187;).<br \/>\n\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u0443\u044e \u0441\u0435\u043a\u0443\u043d\u0434\u0443, \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f<br \/>\n\u043d\u0438\u0442\u044c (Thread), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0437 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u043f\u043e\u0441\u044b\u043b\u0430\u0435\u0442 \u043e\u043a\u043d\u0443 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435<br \/>\n\u043e \u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u043a\u0435. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 &#171;\u0427\u0430\u0441\u044b&#187; \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442<\/p>\n<ul>\n<li>\n        \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 <strong>\u043e\u043a\u043e\u043d\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u044b<\/strong><br \/>\n        \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 \u043d\u0435\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432<br \/>\n        (\u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0442\u0438\u043f\u0430 &#171;Label&#187;,<br \/>\n        \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438);\n    <\/li>\n<li>\n        <strong>\u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u043e\u043a\u043d\u0435<\/strong> \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0442\u0438\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e<br \/>\n        \u043c\u0435\u0442\u043e\u0434\u0430 &#171;OnPaint&#187;;\n    <\/li>\n<li>\n        \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 <strong>\u043d\u0438\u0442\u0435\u0439<\/strong> (\u043b\u0435\u0433\u043a\u043e\u0432\u0435\u0441\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432),<br \/>\n        \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0434\u043b\u044f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<br \/>\n        \u0411\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0438\u0442\u0435\u0439 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c<br \/>\n        \u043d\u0438 \u043e\u0434\u043d\u0443 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443!<br \/>\n        \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0438\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f<br \/>\n        \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0432 \u043e\u043a\u043d\u0435 \u043a\u0430\u0436\u0434\u0443\u044e \u0441\u0435\u043a\u0443\u043d\u0434\u0443.\n    <\/li>\n<\/ul>\n<h3>\n<a name=\"Delegates\"><br \/>\n3. \u0414\u0435\u043b\u0435\u0433\u0430\u0442\u044b (delegate)<br \/>\n<\/a><br \/>\n<\/h3>\n<p>\n\u0414\u0435\u043b\u0435\u0433\u0430\u0442\u044b \u0432 \u044f\u0437\u044b\u043a\u0435 C# \u043e\u0431\u043e\u0431\u0449\u0430\u044e\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u044f\u0437\u044b\u043a\u0435 C.<br \/>\n\u0415\u0441\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u044f:<\/p>\n<ul>\n<li>\n     \u0434\u0435\u043b\u0435\u0433\u0430\u0442 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0430\u0434\u0440\u0435\u0441<br \/>\n     \u043e\u0434\u043d\u043e\u0439-\u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0430 \u0446\u0435\u043b\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0430\u0434\u0440\u0435\u0441\u043e\u0432<br \/>\n     \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 (\u043d\u0430\u043f\u043e\u043c\u043d\u0438\u043c, \u0447\u0442\u043e \u0432 \u044f\u0437\u044b\u043a\u0435 C# \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u0441\u043c\u044b\u0441\u043b\u0435<br \/>\n     \u044f\u0437\u044b\u043a\u0430 C \u043d\u0435\u0442, \u0430 \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0442\u043e\u0434\u044b \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u0438\u043b\u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435).<br \/>\n     \u041f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f<br \/>\n     \u0432\u0441\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430;\n     <\/li>\n<li>\n     \u0434\u0435\u043b\u0435\u0433\u0430\u0442 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430<br \/>\n     \u043a\u043b\u0430\u0441\u0441\u0430 \u0438\u043b\u0438 \u0430\u0434\u0440\u0435\u0441 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 (\u043d\u0438\u0447\u0435\u0433\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e<br \/>\n     \u043d\u0435\u0442 \u043d\u0438 \u0432 C, \u043d\u0438 \u0432 C++!). \u041f\u043e-\u0432\u0438\u0434\u0438\u043c\u043e\u043c\u0443, \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<br \/>\n     \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u0430 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u0445\u0440\u0430\u043d\u0438\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e<br \/>\n     \u043a \u0441\u0441\u044b\u043b\u043a\u0435 \u043d\u0430 \u0438\u043c\u044f \u043c\u0435\u0442\u043e\u0434\u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443<br \/>\n     \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u0441\u0441\u044b\u043b\u043a\u0430<br \/>\n     \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442 \u043d\u0435 \u043d\u0443\u0436\u043d\u0430 (\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0445\u0440\u0430\u043d\u0438\u0442 null).\n     <\/li>\n<\/ul>\n<p>\n\u0414\u0435\u043b\u0435\u0433\u0430\u0442 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre>\n    public delegate void LogHandler(string s);\n<\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u043c\u044b \u043e\u043f\u0438\u0441\u0430\u043b\u0438 \u0442\u0438\u043f &#171;LogHandler&#187;, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442<br \/>\n\u0441\u043f\u0438\u0441\u043e\u043a \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 \u043d\u0430 \u043c\u0435\u0442\u043e\u0434\u044b \u0441 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u0442\u0438\u043f\u0430 string<br \/>\n(\u0441\u0442\u0440\u043e\u043a\u0430), \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 void (\u0442.\u0435. \u043d\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u0435<br \/>\n\u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f). \u042d\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a<br \/>\n\u0432\u043d\u0435, \u0442\u0430\u043a \u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043b\u0430\u0441\u0441\u0430 \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0438\u043c\u0435\u043d. \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<br \/>\n\u0434\u0435\u043b\u0435\u0433\u0430\u0442\u0430 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u043d\u043e\u0432\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438\u0448\u044c<br \/>\n\u0431\u043e\u043b\u0435\u0435 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438 \u0443\u0434\u043e\u0431\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u043e\u0439 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u0430,<br \/>\n\u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u043e\u0433\u043e \u0438\u0437 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 MulticastDelegate.\n<\/p>\n<p>\n\u0421 \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f:<\/p>\n<ul>\n<li>\n     \u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u0442\u0438\u043f\u0430 \u0434\u0435\u043b\u0435\u0433\u0430\u0442, \u043f\u0435\u0440\u0435\u0434\u0430\u0432 \u0435\u043c\u0443 \u0430\u0434\u0440\u0435\u0441<br \/>\n     \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u043a\u043b\u0430\u0441\u0441\u0430 \u0438\u043b\u0438 \u043c\u0435\u0442\u043e\u0434\u0430, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c\u043e\u0433\u043e<br \/>\n     \u043a \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c\u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0443, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440<\/p>\n<pre>\n     LogHandler lh1 = new LogHandler(t.Trace);\n     LogHandler lh2 = new LogHandler(A.Log);\n<\/pre>\n<p>     \u0412 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0443<br \/>\n     \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043c\u0435\u0442\u043e\u0434 <tt>Trace<\/tt> \u043e\u0431\u044a\u0435\u043a\u0442\u0430 <tt>t<\/tt>, \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c &#8212;<br \/>\n     \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u0435\u0442\u043e\u0434 <tt>Log<\/tt> \u043a\u043b\u0430\u0441\u0441\u0430 <tt>A<\/tt>;\n     <\/li>\n<li>\n     \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043a \u0441\u043f\u0438\u0441\u043a\u0443 \u0441\u0441\u044b\u043b\u043e\u043a \u043d\u043e\u0432\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b,<br \/>\n     \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e &#171;+=&#187;, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre>\n     LogHandler lh = null;\n     lh += new LogHandler(t.Trace);\n     lh += new LogHandler(A.Log);\n<\/pre>\n<\/li>\n<li>\n     \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c (\u0438\u043d\u043e\u0433\u0434\u0430 \u0433\u043e\u0432\u043e\u0440\u044f\u0442 &#171;fire&#187;,<br \/>\n     \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0438\u043b\u0438 \u0437\u0430\u0436\u0435\u0447\u044c) \u0432\u0441\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430,<br \/>\n     \u0445\u0440\u0430\u043d\u044f\u0449\u0435\u0433\u043e\u0441\u044f \u0432 \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u0435. \u041c\u0435\u0442\u043e\u0434\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e<br \/>\n     \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0438\u0445 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432 \u0434\u0435\u043b\u0435\u0433\u0430\u0442, \u043d\u043e \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e\u0442<br \/>\n     \u0432\u044b\u0437\u043e\u0432 \u0432 \u0432\u0438\u0434\u0435 \u043e\u0434\u043d\u043e\u0433\u043e-\u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<br \/>\n     \u041f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043c\u0435\u0442\u043e\u0434\u0430\u043c<br \/>\n     \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u0430. \u0412 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435<br \/>\n     \u0434\u0435\u043b\u0435\u0433\u0430\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f (&#171;\u0437\u0430\u0436\u0438\u0433\u0430\u0435\u0442\u0441\u044f&#187;) \u0442\u0430\u043a:<\/p>\n<pre>\n     LogHandler lh;\n     . . .\n     lh(\"Start process\");\n<\/pre>\n<\/li>\n<\/ul>\n<p>\n\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 (\u0444\u0430\u0439\u043b<br \/>\n&#171;<a href=\"projects\/Delegates\/DlTst.cs\">DlTst.cs<\/a>&#171;):<br \/>\n\u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043a\u043b\u0430\u0441\u0441 &#171;Process&#187; \u0441 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c &#171;Run&#187;,<br \/>\n\u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442 \u0442\u0438\u043f\u0430 LogHandler.<br \/>\n\u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0432 \u043d\u0435\u043c \u043c\u0435\u0442\u043e\u0434\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e<br \/>\n\u0445\u043e\u0434\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430.<br \/>\n\u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043c\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0432\u0441\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435<br \/>\n\u043c\u0435\u0442\u043e\u0434\u044b, \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u044f \u0438\u043c \u0441\u0442\u0440\u043e\u043a\u0443 &#171;Start procerss&#187;, \u043f\u043e \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044e \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 &#8212;<br \/>\n\u0441\u0442\u0440\u043e\u043a\u0443 &#171;Stop process&#187;. \u0427\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439<br \/>\n\u043d\u0430 \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b, \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043a\u043b\u0430\u0441\u0441 &#171;Tracer&#187; \u0441<br \/>\n\u0435\u0434\u0438\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c (\u043d\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c!) \u043c\u0435\u0442\u043e\u0434\u043e\u043c &#171;Trace&#187;, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043a\u043b\u0430\u0441\u0441<br \/>\n&#171;Test&#187; \u0441\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c &#171;Log&#187;, \u043e\u0431\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442<br \/>\n\u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443.<br \/>\n\u041a\u043b\u0430\u0441\u0441 &#171;Test&#187; \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043c\u0435\u0442\u043e\u0434 &#171;Main&#187;, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f<br \/>\n\u0440\u0430\u0431\u043e\u0442\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u041c\u0435\u0442\u043e\u0434\u044b &#171;Trace&#187; \u0438 &#171;Log&#187; \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0447\u0430\u0442\u0430\u044e\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u0443\u044e<br \/>\n\u0441\u0442\u0440\u043e\u043a\u0443, \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0430\u044f \u0435\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u043c, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c,<br \/>\n\u043a\u0430\u043a\u043e\u0439 \u0438\u043c\u0435\u043d\u043d\u043e \u043c\u0435\u0442\u043e\u0434 \u0431\u044b\u043b \u0432\u044b\u0437\u0432\u0430\u043d. \u0412\u043e\u0442 \u0442\u0435\u043a\u0441\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b.<\/p>\n<pre>\nusing System;\n\npublic delegate void LogHandler(string s);\n\npublic class Process {\n    public void Run(LogHandler lh) {\n        lh(\"Start process\");\n        \/\/...\n        lh(\"Stop process\");\n    }\n}\n\npublic class Tracer {\n    public void Trace(string s) {\n        System.Console.WriteLine(\"Tracer: {0}\", s);\n    }\n}\n\npublic class Test {\n    public static void Log(string s) {\n        System.Console.WriteLine(\"static Log: {0}\", s);\n    }\n\n    public static int Main(string[] args) {\n        Process p = new Process();\n        Tracer t = new Tracer();\n        LogHandler lh = null;\n        lh += new LogHandler(Log);\n        lh += new LogHandler(t.Trace);\n        p.Run(lh);\n        return 0;\n    }\n}\n<\/pre>\n<\/p>\n<p>\n\u0412\u043e\u0442 \u0447\u0442\u043e \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 \u043a\u043e\u043d\u0441\u043e\u043b\u044c:<\/p>\n<pre>\n    static Log: Start process\n    Tracer: Start process\n    static Log: Stop process\n    Tracer: Stop process\n<\/pre>\n<\/p>\n<h3>\n<a name=\"Events\"><br \/>\n4. \u0421\u043e\u0431\u044b\u0442\u0438\u044f (event)<br \/>\n<\/a><br \/>\n<\/h3>\n<p>\n\u0421\u043e\u0431\u044b\u0442\u0438\u0435 &#171;event&#187; &#8212; \u044d\u0442\u043e \u0447\u0430\u0441\u0442\u043d\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439<br \/>\n\u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e.<br \/>\n\u0421\u043e\u0431\u044b\u0442\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0436\u0438\u0433\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c<br \/>\n\u043e\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043e. \u0421 \u0441\u043e\u0431\u044b\u0442\u0438\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043b\u0438\u0448\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f<br \/>\n&#171;+=&#187; (\u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043c\u0435\u0442\u043e\u0434 \u043a \u0441\u043f\u0438\u0441\u043a\u0443) \u0438 &#171;-=&#187; (\u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043c\u0435\u0442\u043e\u0434 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430).<br \/>\n\u0421\u043e\u0431\u044b\u0442\u0438\u0435 \u0441\u043b\u0443\u0436\u0438\u0442 \u0434\u043b\u044f \u043e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445, \u043a\u0442\u043e \u0432 \u043d\u0435\u043c \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043d,<br \/>\n\u043f\u0443\u0442\u0435\u043c \u0432\u044b\u0437\u043e\u0432\u0430 \u0432\u0441\u0435\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430.<br \/>\n\u0412\u0441\u0435 \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0432 \u0441\u043e\u0431\u044b\u0442\u0438\u0438 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b<br \/>\n\u0432 \u043d\u0435\u043c, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0442\u0438\u043f\u0430 event \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f<br \/>\n&#171;+=&#187; (\u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043c\u0435\u0442\u043e\u0434), \u043f\u0440\u0430\u0432\u044b\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f<br \/>\n\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043c\u0435\u0442\u043e\u0434.<br \/>\n\u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f<br \/>\n\u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0432 \u0431\u043e\u043b\u0435\u0435 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0435 (\u0444\u0430\u0439\u043b<br \/>\n&#171;<a href=\"projects\/Delegates\/EvTst.cs\">EvTst.cs<\/a>&#171;):<\/p>\n<pre>\nusing System;\n\npublic delegate void LogHandler(string s);\n\npublic class Process {\n    public event LogHandler LogEvent = null;\n\n    public void Run() {\n        if (LogEvent != null)\n            LogEvent(\"Start process\");\n\n        \/\/...\n\n        if (LogEvent != null)\n            LogEvent(\"Stop process\");\n    }\n}\n\npublic class Tracer {\n    public void Trace(string s) {\n        System.Console.WriteLine(\"Tracer: {0}\", s);\n    }\n}\n\npublic class Test {\n    public static void Log(string s) {\n        System.Console.WriteLine(\"static Log: {0}\", s);\n    }\n\n    public static int Main(string[] args) {\n        Process p = new Process();\n        Tracer t = new Tracer();\n        p.LogEvent += new LogHandler(Log);\n        p.LogEvent += new LogHandler(t.Trace);\n        p.Run();\n        return 0;\n    }\n}\n<\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u043a\u043b\u0430\u0441\u0441 Process \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c LogEvent \u0442\u0438\u043f\u0430<br \/>\nLogHandler. \u041c\u0435\u0442\u043e\u0434 Run \u0437\u0430\u0436\u0438\u0433\u0430\u0435\u0442 \u044d\u0442\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0438 \u0432 \u043a\u043e\u043d\u0446\u0435<br \/>\n\u0441\u0432\u043e\u0435\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0438 &#171;Start process&#187; \u0438<br \/>\n&#171;Stop process&#187; \u0441\u043e\u043e\u0442\u0432\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e. \u0412 \u043c\u0435\u0442\u043e\u0434\u0435 Main \u043a\u043b\u0430\u0441\u0441\u0430 Test<br \/>\n\u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0442\u0438\u043f\u0430 Tracer \u0438 Process, \u043a \u0441\u043e\u0431\u044b\u0442\u0438\u044e LogEvent<br \/>\n\u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0442\u0438\u043f\u0430 Process \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u0435\u0442\u043e\u0434<br \/>\nLog \u043a\u043b\u0430\u0441\u0441\u0430 Test \u0438 \u043c\u0435\u0442\u043e\u0434 Trace \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0442\u0438\u043f\u0430 Tracer.<br \/>\n\u0412 \u043a\u043e\u043d\u0446\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434 Run \u043e\u044a\u0435\u043a\u0442\u0430 \u0442\u0438\u043f\u0430 Process. \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442<br \/>\n\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430, \u043c\u0435\u0442\u043e\u0434\u0443 Run \u0443\u0436\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0438\u043a\u0430\u043a\u0438\u0445<br \/>\n\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u0447\u0442\u043e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0443\u0434\u043e\u0431\u043d\u0435\u0435. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0442\u0430\u043a\u043e\u0439 \u0436\u0435,<br \/>\n\u043a\u0430\u043a \u0438 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435.\n<\/p>\n<h3>\n<a name=\"Threads\"><br \/>\n5. \u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435: \u043d\u0438\u0442\u0438 (Threads)<br \/>\n<\/a><br \/>\n<\/h3>\n<p>\n<strong>\u041f\u0440\u0438\u043c\u0435\u0440 &#171;Ope\u043b-\u0420\u0435\u0448\u043a\u0430&#187;<\/strong> (\u0444\u0430\u0439\u043b<br \/>\n&#171;<a href=\"projects\/Threads\/Try.cs\">Try.cs<\/a>&#171;).<br \/>\n\u0421\u043e\u0437\u0434\u0430\u0435\u043c 2 \u043d\u0438\u0442\u0438, \u043e\u0434\u043d\u0430 4 \u0440\u0430\u0437\u0430 \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 \u043d\u0430 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0441\u043b\u043e\u0432\u043e &#171;\u041e\u0440\u0435\u043b&#187;, \u0434\u0440\u0443\u0433\u0430\u044f<br \/>\n4 \u0440\u0430\u0437\u0430 \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 &#171;\u0420\u0435\u0448\u043a\u0430&#187;. \u0412 \u043f\u0435\u0440\u0435\u0440\u044b\u0432\u0430\u0445 \u043c\u0435\u0436\u0434\u0443 \u043f\u0435\u0447\u0430\u0442\u044f\u043c\u0438 \u043a\u0430\u0436\u0434\u0430\u044f \u043d\u0438\u0442\u044c<br \/>\n\u0437\u0430\u0441\u044b\u043f\u0430\u0435\u0442 \u043d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u043e \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0435 \u0432<br \/>\n\u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0435 \u043e\u0442 \u043d\u0443\u043b\u044f \u0434\u043e \u0442\u0440\u0435\u0445 \u0441\u0435\u043a\u0443\u043d\u0434.<\/p>\n<pre>\nusing System;\nusing System.Threading;\n\npublic class Try {\n    public static Random rand = new Random();\n    public String result;\n\n    public Try(String s) { result = s; }\n\n    public void Run() {\n        for (int i = 0; i &lt; 4; i++) {\n            int dt = rand.Next(3000);\n            \/\/ Console.WriteLine(&quot;dt = {0}&quot;, dt);\n            Thread.Sleep(dt);\n            System.Console.WriteLine(result);\n        }\n    }\n\n    public static void Main() {\n        Try t1 = new Try(&quot;Orel&quot;);\n        Try t2 = new Try(&quot;Reshka&quot;);\n        Thread thread1 = new Thread(new ThreadStart(t1.Run));\n        Thread thread2 = new Thread(new ThreadStart(t2.Run));\n        thread1.Start();\n        thread2.Start();\n    }\n}\n<\/pre>\n<\/p>\n<p>\n\u0412\u043e\u0442 \u043e\u0434\u0438\u043d \u0438\u0437 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b:<\/p>\n<pre>\n    Orel\n    Orel\n    Reshka\n    Orel\n    Reshka\n    Orel\n    Reshka\n    Reshka\n<\/pre>\n<\/p>\n<p>\n<strong>\u0412\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440: \u0422\u0438\u043a-\u0422\u0430\u043a<\/strong> (\u0444\u0430\u0439\u043b<br \/>\n&#171;<a href=\"projects\/Threads\/TickTack.cs\">TickTack.cs<\/a>&#171;).<br \/>\n\u0421\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442 \u0442\u0438\u043f\u0430 Timer, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f<br \/>\n\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430:<br \/>\n1) \u0434\u0435\u043b\u0435\u0433\u0430\u0442, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043c\u0435\u0442\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0430\u0439\u043c\u0435\u0440 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442<br \/>\n\u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043a\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438; 2) \u043e\u0431\u044a\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043a\u0430\u0436\u0434\u044b\u0439<br \/>\n\u0440\u0430\u0437 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u044d\u0442\u043e\u043c\u0443 \u043c\u0435\u0442\u043e\u0434\u0443; 3) \u0432\u0440\u0435\u043c\u044f \u0432 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445 \u043f\u0435\u0440\u0435\u0434 \u043f\u0435\u0440\u0432\u044b\u043c<br \/>\n\u0432\u044b\u0437\u043e\u0432\u043e\u043c; 4) \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u043a \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u0432\u044b\u0437\u043e\u0432\u0430\u043c\u0438.<\/p>\n<pre>\n    Timer t = new Timer(callback, new A(), 1000, 1000);\n<\/pre>\n<p>\u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435\u044f\u0432\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0444\u043e\u043d\u043e\u0432\u0430\u044f \u043d\u0438\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0436\u0438\u0432\u0430\u0435\u0442<br \/>\n\u0432 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434.\n<\/p>\n<p>\n\u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 &#171;Tick&#187; \u043f\u0440\u0438 \u043d\u0435\u0447\u0435\u0442\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u0430\u0445<br \/>\n\u0438 &#171;Tack&#187; \u043f\u0440\u0438 \u0447\u0435\u0442\u043d\u044b\u0445, \u0432\u044b\u0437\u043e\u0432\u044b \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0442 \u0440\u0430\u0437 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443. \u0412\u043e\u0442 \u0442\u0435\u043a\u0441\u0442<br \/>\n\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b:<\/p>\n<pre>\nusing System;\nusing System.Threading;\n\nclass A {\n    public int n = 0;\n}\n\npublic class TickTack {\n    public static void Main() {\n        String line;\n        Console.WriteLine(\"Press Enter to terminate...\");\n        TimerCallback callback = new TimerCallback(PrintTick);\n        Timer t = new Timer(callback, new A(), 1000, 1000);\n        line = Console.ReadLine();\n    }\n\n    static void PrintTick(Object state) {\n        int tick = ((A) state).n;\n        ((A) state).n = 1 - tick;\n\n        if (tick == 0)\n            Console.WriteLine(\"tick\");\n        else\n            Console.WriteLine(\"tack\");\n    }\n}\n<\/pre>\n<\/p>\n<h3>\n<a name=\"Sync\"><br \/>\n6. \u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0438\u0442\u0435\u0439 \u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432<br \/>\n<\/a><br \/>\n<\/h3>\n<h4>\n<a name=\"NonSync\"><br \/>\n6.1. \u041f\u0440\u0438\u043c\u0435\u0440 \u043d\u0435\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b<br \/>\n<\/a><br \/>\n<\/h4>\n<p>\n\u0412 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435<br \/>\n&#171;<a href=\"projects\/Threads\/SyncTest.cs\">SyncTest.cs<\/a>&#187;<br \/>\n\u043c\u0430\u0441\u0441\u0438\u0432 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 100 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0446\u0435\u043b\u044b\u043c\u0438 \u0447\u0438\u0441\u043b\u0430\u043c\u0438 \u043e\u0442 1 \u0434\u043e 100.<br \/>\n\u041f\u043e\u043c\u0438\u043c\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043d\u0438\u0442\u0438, \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0435\u0449\u0435 10 \u043d\u0438\u0442\u0435\u0439 (\u0441 \u043d\u043e\u043c\u0435\u0440\u0430\u043c\u0438<br \/>\n\u043e\u0442 1 \u0434\u043e 10). \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043d\u0438\u0442\u044c &#171;\u043f\u0435\u0440\u0435\u043c\u0435\u0448\u0438\u0432\u0430\u0435\u0442&#187; \u043c\u0430\u0441\u0441\u0438\u0432 \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435<br \/>\n10 \u0441\u0435\u043a\u0443\u043d\u0434. \u041e\u043d\u0430 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e 2 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 i, j \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445<br \/>\n\u043e\u0442 0 \u0434\u043e 99 \u0438 \u043c\u0435\u043d\u044f\u0435\u0442 \u043c\u0435\u0441\u0442\u0430\u043c\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0441 \u044d\u0442\u0438\u043c\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c\u0438.<br \/>\n\u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0438\u0442\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442 \u0441\u0443\u043c\u043c\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0430.<br \/>\n\u041a\u0430\u0436\u0434\u0430\u044f \u043d\u0438\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043e\u0434\u043d\u0443 \u0438 \u0442\u0443 \u0436\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c<br \/>\n\u0438\u0437 \u0434\u0432\u0443\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439: \u0441\u0443\u043c\u043c\u0438\u0440\u0443\u0435\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442 \u0435\u0433\u043e \u0441\u0443\u043c\u043c\u0443 \u0441 \u0447\u0438\u0441\u043b\u043e\u043c 5050.<br \/>\n\u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0443\u043c\u043c\u0430 \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u043b\u0430 \u0441 \u0447\u0438\u0441\u043b\u043e\u043c 5050, \u043d\u0438\u0442\u044c \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435<br \/>\n\u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435 \u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0444\u043b\u0430\u0433 \u043e\u0448\u0438\u0431\u043a\u0438, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0432\u0441\u0435 \u043d\u0438\u0442\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u044e\u0442<br \/>\n\u0440\u0430\u0431\u043e\u0442\u0443. \u041f\u0440\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043d\u0438\u0442\u0438<br \/>\n\u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0442\u0430\u043a\u0436\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u044e\u0442 \u0440\u0430\u0431\u043e\u0442\u0443.\n<\/p>\n<p>\n\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043e\u0431\u043c\u0435\u043d\u0430 \u0432 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e<br \/>\n\u043c\u043e\u043c\u0435\u043d\u0442 \u0434\u0432\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0440\u0430\u0432\u043d\u044b \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443. \u0415\u0441\u043b\u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c<br \/>\n\u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043d\u0438\u0442\u0435\u0439, \u0442\u043e \u0441\u0443\u043c\u043c\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f<br \/>\n\u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439.\n<\/p>\n<p>\n\u0412\u043e\u0442 \u0442\u0435\u043a\u0441\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b:<\/p>\n<pre>\nusing System;\nusing System.Threading;\n\npublic class SyncTest {\n    public static int[] a = new int[100];\n    public static bool stop = false;\n    public static bool incorrect = false;\n\n    public static int Main() {\n        int i;\n        Thread[] threads = new Thread[10];\n\n        \/\/ Fill in the array\n        for (i = 0; i &lt; 100; i++)\n            a[i] = i + 1;\n\n        for (i = 0; i &lt; 10; i++) {\n            threads[i] = new Thread(\n                new ThreadStart(CheckSum)\n            );\n            threads[i].Name = &quot;Thread &quot; + (i + 1).ToString();\n            threads[i].Start();\n        }\n\n        Mix();\n\n        stop = true;\n\n        if (!incorrect)\n            Console.WriteLine(&quot;Sum is correct!&quot;);\n\n        return 0;\n    }\n\n    public static void Mix() {\n        Console.WriteLine(&quot;mixing...&quot;);\n        Random rnd = new Random();\n        DateTime start = DateTime.Now;\n        while (!stop &amp;&amp; (DateTime.Now - start).Seconds &lt; 10) {\n            int i = rnd.Next(0, 100);\n            int j = rnd.Next(0, 100);\n            \/\/ Console.WriteLine(&quot;swapping ({0}, {1})&quot;, i, j);\n            int tmp = a[i];\n            a[i] = a[j];\n            a[j] = tmp;\n        }\n    }\n\n    public static void CheckSum() {\n        while (!stop) {\n            int s = 0;\n\n            for (int i = 0; i &lt; 100; i++) {\n                s += a[i];\n            }\n\n            if (s != 5050) {\n                Console.WriteLine(\n                    &quot;{0}: Sum = {1} -- incorrect!&quot;,\n                    Thread.CurrentThread.Name, s\n                );\n                incorrect = true;\n                stop = true;\n            }\n        }\n    }\n}\n<\/pre>\n<\/p>\n<p>\n\u041f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u0434\u0430\u0447\u0438 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d:<\/p>\n<pre>\n    mixing...\n    Thread 7: Sum = 3970 -- incorrect!\n    Thread 1: Sum = 4151 -- incorrect!\n    Thread 2: Sum = 3896 -- incorrect!\n    Thread 3: Sum = 4151 -- incorrect!\n    Thread 4: Sum = 4853 -- incorrect!\n    Thread 5: Sum = 4935 -- incorrect!\n    Thread 6: Sum = 3881 -- incorrect!\n    Thread 10: Sum = 5017 -- incorrect!\n    Thread 9: Sum = 4577 -- incorrect!\n    Thread 8: Sum = 4267 -- incorrect!\n<\/pre>\n<\/p>\n<h4>\n<a name=\"Monitor\"><br \/>\n6.2. \u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043b\u0430\u0441\u0441\u0430 Monitor<br \/>\n<\/a><br \/>\n<\/h4>\n<p>\n\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0442\u043e\u0442 \u0436\u0435 \u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0442\u043e \u0438 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435,<br \/>\n\u043d\u043e \u0434\u043b\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043c\u0430\u0441\u0441\u0438\u0432\u0443 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f<br \/>\n\u043e\u0431\u043c\u0435\u043d\u0430 \u0434\u0432\u0443\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044e<br \/>\n\u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043b\u0430\u0441\u0441\u0430 <strong>Monitor<\/strong>.<br \/>\n\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b &#8212; \u0432 \u0444\u0430\u0439\u043b\u0435<br \/>\n&#171;<a href=\"projects\/Threads\/SyncTst1.cs\">SyncTst1.cs<\/a>&#171;.<br \/>\n\u0418\u0434\u0435\u044f \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0438\u0442\u044c \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439<br \/>\n\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 (&#171;\u043c\u043e\u043d\u0438\u0442\u043e\u0440&#187;), \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u0441 \u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c\u044b\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c.<br \/>\n\u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 &#8212; \u044d\u0442\u043e \u043c\u0430\u0441\u0441\u0438\u0432 &#171;a&#187;.<br \/>\n\u041f\u0435\u0440\u0435\u0434 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439<br \/>\n\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0437\u0430\u0445\u0432\u0430\u0442 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0430:<\/p>\n<pre>\n    Monitor.Enter(a);\n<\/pre>\n<p>\u041f\u043e \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0438 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u0442\u0441\u044f:<\/p>\n<pre>\n    Monitor.Exit(a);\n<\/pre>\n<p>\u0412 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0432\u0445\u043e\u0434\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439<br \/>\n\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442, \u0441\u0432\u044f\u0437\u0430\u044f\u043d\u043d\u044b\u0439 \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c &#171;a&#187;, \u0435\u0441\u043b\u0438<br \/>\n\u043e\u043d \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0431\u044b\u043b \u0441\u043e\u0437\u0434\u0430\u043d. \u0415\u0441\u043b\u0438 \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0437\u0430\u0445\u0432\u0430\u0442\u0430<br \/>\n\u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0430 \u043e\u043d \u0443\u0436\u0435 \u0437\u0430\u0445\u0432\u0430\u0447\u0435\u043d, \u0442\u043e \u043d\u0438\u0442\u044c \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443<br \/>\n\u0438 \u0436\u0434\u0435\u0442, \u043f\u043e\u043a\u0430 \u043c\u043e\u043d\u0438\u0442\u043e\u0440 \u043d\u0435 \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442\u0441\u044f, \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e<br \/>\n\u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0434\u043e\u043b\u0433\u043e.\n<\/p>\n<p>\n\u041c\u0435\u0442\u043e\u0434\u044b &#171;Monitor.Enter&#187; \u0438 &#171;Monitor.Exit&#187; &#8212; \u044d\u0442\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435<br \/>\n\u043c\u0435\u0442\u043e\u0434\u044b \u043a\u043b\u0430\u0441\u0441\u0430 Monitor. \u041c\u043e\u043d\u0438\u0442\u043e\u0440\u044b \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c<br \/>\n\u0441\u0435\u043a\u0446\u0438\u044f\u043c \u0432 Windows.\n<\/p>\n<p>\n\u041f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438<br \/>\n\u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435, \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0447\u0435\u0433\u043e<br \/>\n\u043c\u043e\u043d\u0438\u0442\u043e\u0440 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d! \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e<br \/>\n\u0441\u0435\u043a\u0446\u0438\u044e \u043d\u0430\u0434\u043e \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043c\u0435\u0449\u0430\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u044c \u0431\u043b\u043e\u043a\u0430 &#171;try&#187;,<br \/>\n\u0430 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0438 \u0431\u043b\u043e\u043a\u0430 &#171;finally&#187;:<\/p>\n<pre>\n    Monitor.Enter(a);\n    try {\n        \/\/ \u0422\u0435\u043a\u0441\u0442 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0435\u043a\u0446\u0438\u0438\n        \/\/ . . .\n    }\n    finally {\n        Monitor.Exit(a);\n    }\n<\/pre>\n<\/p>\n<p>\n\u0412 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0430<br \/>\n\u0437\u0430\u0449\u0438\u0449\u0430\u0435\u0442\u0441\u044f \u0443\u0447\u0430\u0441\u0442\u043e\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0434\u0432\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430<br \/>\n\u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043c\u0435\u0441\u0442\u0430\u043c\u0438<\/p>\n<pre>\n    Monitor.Enter(a);\n    try {\n        int tmp = a[i];\n        a[i] = a[j];\n        a[j] = tmp;\n    } finally {\n        Monitor.Exit(a);\n    }\n<\/pre>\n<p>\u0430 \u0442\u0430\u043a\u0436\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u0443\u043c\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f:<\/p>\n<pre>\n    Monitor.Enter(a);\n    try {\n        for (int i = 0; i &lt; 100; i++) {\n            s += a[i];\n        }\n    } finally {\n        Monitor.Exit(a);\n    }\n<\/pre>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0434\u0432\u0435 \u043d\u0438\u0442\u0438 \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e<br \/>\n\u0432\u043e\u0439\u0442\u0438 \u0432 \u044d\u0442\u0438 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u0435\u043a\u0446\u0438\u0438.\n<\/p>\n<p>\n\u041a\u0430\u043a \u043b\u0435\u0433\u043a\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439<br \/>\n\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043e\u0448\u0438\u0431\u043a\u0438 \u043d\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u0432\u043e\u0442 \u0435\u0435 \u0432\u044b\u0434\u0430\u0447\u0430:<\/p>\n<pre>\n    mixing...\n    Sum is correct!\n<\/pre>\n<\/p>\n<h4>\n<a name=\"lock\"><br \/>\n6.3. \u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430 &#171;lock&#187;<br \/>\n<\/a><br \/>\n<\/h4>\n<p>\n\u0422\u043e\u0442 \u0436\u0435 \u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e<br \/>\n\u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430 <strong>lock<\/strong> (\u043d\u0435\u044f\u0432\u043d\u043e \u0442\u0430\u043a\u0436\u0435<br \/>\n\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442 \u0442\u0438\u043f\u0430 Monitor): \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430<br \/>\n&#171;<a href=\"projects\/Threads\/SyncTst2.cs\">SyncTst2.cs<\/a>&#171;.\n<\/p>\n<p>\n\u041a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e &#171;lock&#187; \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044e<br \/>\n\u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0430 \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u0440\u043e\u0442\u043a\u043e \u0438 \u0438\u0437\u044f\u0449\u043d\u043e. \u0410 \u0438\u043c\u0435\u043d\u043d\u043e,<br \/>\n\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f<\/p>\n<pre>\n    lock(a) {\n        \/\/ \u0422\u0435\u043a\u0441\u0442 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0435\u043a\u0446\u0438\u0438\n        \/\/ . . .\n    }\n<\/pre>\n<p>\u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u0430 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0443 \u043a\u043e\u0434\u0430<\/p>\n<pre>\n    Monitor.Enter(a);\n    try {\n        \/\/ \u0422\u0435\u043a\u0441\u0442 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0435\u043a\u0446\u0438\u0438\n        \/\/ . . .\n    }\n    finally {\n        Monitor.Exit(a);\n    }\n<\/pre>\n<p>\u043d\u043e \u043a\u043e\u0440\u043e\u0447\u0435 \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u0435\u0435 \u0434\u043b\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0445.\n<\/p>\n<h4>\n<a name=\"ReaderWriterLock\"><br \/>\n6.4. \u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0442\u0438\u043f\u0430 ReaderWriterLock<br \/>\n<\/a><br \/>\n<\/h4>\n<p>\n\u0422\u043e\u0442 \u0436\u0435 \u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e<br \/>\n\u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0442\u0438\u043f\u0430 <strong>ReaderWriterLock<\/strong>: \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430<br \/>\n&#171;<a href=\"projects\/Threads\/SyncTst3.cs\">SyncTst3.cs<\/a>&#171;.\n<\/p>\n<p>\n\u041e\u0431\u044a\u0435\u043a\u0442 \u0442\u0438\u043f\u0430 ReaderWriterLock \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0435<br \/>\n\u0447\u0442\u0435\u043d\u0438\u0435\/\u0437\u0430\u043f\u0438\u0441\u044c \u0438\u043b\u0438 \u0437\u0430\u043f\u0438\u0441\u044c\/\u0437\u0430\u043f\u0438\u0441\u044c \u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430<br \/>\n\u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043d\u0438\u0442\u044f\u043c\u0438, \u043d\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0435 \u0447\u0442\u0435\u043d\u0438\u0435.<br \/>\n\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0442\u0438\u043f\u0430 ReaderWriterLock<\/p>\n<pre>\n    static ReaderWriterLock rwlock = new ReaderWriterLock();\n<\/pre>\n<p>\u041d\u0438\u0442\u044c, \u0436\u0435\u043b\u0430\u044e\u0449\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0432 \u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442,<br \/>\n\u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 rwlock:<\/p>\n<pre>\n    rwlock.AcquireWriterLock(Timeout.Infinite);\n<\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043e, \u0442\u043e \u043d\u0438\u0442\u044c \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f<br \/>\n\u0434\u043e \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0438\u043b\u0438 \u0434\u043e \u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u044f<br \/>\n\u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0430. \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435:<\/p>\n<pre>\n    rwlock.AcquireReaderLock(Timeout.Infinite);\n<\/pre>\n<p>\u0412 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u0448\u0438\u0432\u0430\u044e\u0449\u0430\u044f \u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0441\u0438\u0442 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435<br \/>\n\u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c, \u0430 \u0441\u0443\u043c\u043c\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u043d\u0438\u0442\u0438 &#8212; \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435<br \/>\n\u0441\u0443\u043c\u043c\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u043d\u0438\u0442\u0438 \u043d\u0435 \u043c\u0435\u0448\u0430\u044e\u0442 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443.\n<\/p>\n<p>\n\u041f\u0435\u0440\u0435\u043c\u0435\u0448\u0438\u0432\u0430\u044e\u0449\u0430\u044f \u043d\u0438\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:<\/p>\n<pre>\n    rwlock.AcquireWriterLock(Timeout.Infinite);\n    try {\n        \/\/ Console.WriteLine(\"swapping ({0}, {1})\", i, j);\n        int tmp = a[i];\n        a[i] = a[j];\n        a[j] = tmp;\n    } finally {\n        rwlock.ReleaseWriterLock();\n    }\n<\/pre>\n<p>\u0421\u0443\u043c\u043c\u0438\u0440\u0443\u044e\u0449\u0430\u044f \u043d\u0438\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043a\u043e\u0434<\/p>\n<pre>\n    rwlock.AcquireReaderLock(Timeout.Infinite);\n    try {\n        for (int i = 0; i &lt; 100; i++) {\n            s += a[i];\n        }\n    } finally {\n        rwlock.ReleaseReaderLock();\n    }\n<\/pre>\n<h4>\n<a name=\"SyncEvents\"><br \/>\n6.5. \u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0442\u0438\u043f\u0430<br \/>\nAutoResetEvent \u0438 ManualResetEvent<br \/>\n<\/a><br \/>\n<\/h4>\n<p>\n\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f (\u0442\u043e\u0447\u043d\u0435\u0435 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f) \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438<br \/>\n\u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0442\u0438\u043f\u0430 <strong>AutoResetEvent<\/strong><br \/>\n\u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439<br \/>\n&#171;<a href=\"projects\/Threads\/SyncTst4.cs\">SyncTst4.cs<\/a>&#171;.<br \/>\n\u0421\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0434\u0432\u0435 \u043d\u0438\u0442\u0438, \u043e\u0434\u043d\u0430 \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 \u043d\u0430 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u043d\u0435\u0447\u0435\u0442\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u043e\u0442 1 \u0434\u043e 999,<br \/>\n\u0434\u0440\u0443\u0433\u0430\u044f &#8212; \u0447\u0435\u0442\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u043e\u0442 2 \u0434\u043e 1000. \u041f\u0440\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438<br \/>\n\u043f\u0435\u0447\u0430\u0442\u0430\u044e\u0442\u0441\u044f \u0434\u043b\u0438\u043d\u043d\u044b\u0435 \u0441\u0435\u0440\u0438\u0438 \u0438\u0437 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0435\u0442\u043d\u044b\u0445 \u0438\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0447\u0435\u0442\u043d\u044b\u0445<br \/>\n\u0447\u0438\u0441\u0435\u043b \u0441 \u043d\u0435\u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u044b\u043c\u0438 \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f.<br \/>\n\u0412 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 \u043f\u0435\u0440\u0432\u0430\u044f \u043d\u0438\u0442\u044c \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 \u043d\u0435\u0447\u0435\u0442\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e,<br \/>\n\u0437\u0430\u0442\u0435\u043c \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0432\u0442\u043e\u0440\u043e\u0439 \u043d\u0438\u0442\u0438, \u0447\u0442\u043e \u043e\u043d\u0430 \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043b\u0430, \u0438 \u0436\u0434\u0435\u0442,<br \/>\n\u043f\u043e\u043a\u0430 \u0432\u0442\u043e\u0440\u0430\u044f \u043d\u0438\u0442\u044c \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 \u0447\u0435\u0442\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e. \u0412\u0442\u043e\u0440\u0430\u044f \u043d\u0438\u0442\u044c \u0436\u0434\u0435\u0442, \u043f\u043e\u043a\u0430 \u043f\u0435\u0440\u0432\u0430\u044f<br \/>\n\u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 \u043d\u0435\u0447\u0435\u0442\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e, \u0437\u0430\u0442\u0435\u043c \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 \u0447\u0435\u0442\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442<br \/>\n\u043f\u0435\u0440\u0432\u043e\u0439 \u043d\u0438\u0442\u0438, \u0447\u0442\u043e \u043e\u043d\u0430 \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043b\u0430. \u041a\u0430\u0436\u0434\u0430\u044f \u043d\u0438\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0434\u043b\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438<br \/>\n\u0441\u0432\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0442\u0438\u043f\u0430 AutoResetEvent (\u0442.\u0435. \u0432\u0441\u0435\u0433\u043e \u0442\u0430\u043a\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432<br \/>\n\u0434\u0432\u0430: \u043f\u0435\u0440\u0432\u044b\u0439 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0438\u0433\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0435\u0440\u0432\u043e\u0439 \u043d\u0438\u0442\u044c\u044e<br \/>\n\u0438 \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f \u0432\u0442\u043e\u0440\u043e\u0439 \u043d\u0438\u0442\u044c\u044e; \u0432\u0442\u043e\u0440\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u0442\u043e\u0440\u043e\u0439 \u043d\u0438\u0442\u044c\u044e<br \/>\n\u0438 \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0432\u043e\u0439).\n<\/p>\n<p>\n\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b:\n<\/p>\n<pre>\nusing System;\nusing System.Threading;\n\nclass EventTst {\n    static AutoResetEvent e1 = new AutoResetEvent(false);\n    static AutoResetEvent e2 = new AutoResetEvent(false);\n\n    public static void Main() {\n        try {\n            Thread thread1 = new Thread(\n                new ThreadStart(PrintOdds)\n            );\n            Thread thread2 = new Thread(\n                new ThreadStart(PrintEvens)\n            );\n\n            thread1.Start();\n            thread2.Start();\n\n            thread1.Join();\n            thread2.Join();\n        } finally {\n            e1.Close();\n            e2.Close();\n        }\n    }\n\n    static void PrintOdds() {\n        for (int i = 1; i &lt;= 999; i += 2) {\n            Console.WriteLine(&quot;{0} --&quot;, i);\n            e1.Set();\n            e2.WaitOne(); \/\/ Wait until even number is printed\n        }\n    }\n\n    static void PrintEvens() {\n        for (int i = 2; i &lt;= 1000; i += 2) {\n            e1.WaitOne(); \/\/ Wait until odd number is printed\n            Console.WriteLine(&quot;-- {0}&quot;, i);\n            e2.Set();\n        }\n    }\n}\n<\/pre>\n<p>\n\u0417\u0434\u0435\u0441\u044c e1 \u0438 e2 &#8212; \u044d\u0442\u043e \u0434\u0432\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0442\u0438\u043f\u0430 AutoResetEvent,<br \/>\n\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b:<\/p>\n<pre>\n    static AutoResetEvent e1 = new AutoResetEvent(false);\n    static AutoResetEvent e2 = new AutoResetEvent(false);\n<\/pre>\n<p>\u041e\u0431\u044a\u0435\u043a\u0442 e1 \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0435 \u043d\u0435\u0447\u0435\u0442\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e<br \/>\n\u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u043d\u043e, e2 &#8212; \u0447\u0442\u043e \u0447\u0435\u0442\u043d\u043e\u0435 \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u043d\u043e. \u041e\u0431\u044a\u0435\u043a\u0442 e1 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f<br \/>\n\u0432 \u0441\u0438\u0433\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0435\u0440\u0432\u043e\u0439 \u043d\u0438\u0442\u044c\u044e \u0438 \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f \u0432\u0442\u043e\u0440\u043e\u0439 \u043d\u0438\u0442\u044c\u044e.<br \/>\n\u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, e2 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u0442\u043e\u0440\u043e\u0439 \u043d\u0438\u0442\u044c\u044e \u0438 \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0432\u043e\u0439.<br \/>\n\u0414\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0432 \u0441\u0438\u0433\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434 &#171;Set&#187;,<br \/>\n\u0434\u043b\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f &#8212; \u043c\u0435\u0442\u043e\u0434 &#171;WaitOne&#187;. \u041f\u0435\u0440\u0432\u0430\u044f \u043d\u0438\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430<\/p>\n<pre>\n    for (int i = 1; i &lt;= 999; i += 2) {\n        Console.WriteLine(&quot;{0} --&quot;, i);\n        e1.Set();     \/\/ Set e1 in the signal state\n        e2.WaitOne(); \/\/ Wait until even number is printed\n    }\n<\/pre>\n<p>\u0412\u0442\u043e\u0440\u0430\u044f \u043d\u0438\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442<\/p>\n<pre>\n    for (int i = 2; i &lt;= 1000; i += 2) {\n        e1.WaitOne(); \/\/ Wait until odd number is printed\n        Console.WriteLine(&quot;-- {0}&quot;, i);\n        e2.Set();     \/\/ Set e2 in the signal state\n    }\n<\/pre>\n<\/p>\n<p>\n\u041f\u043e \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044e \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0442\u0438\u043f\u0430 AutoResetEvent,<br \/>\n\u0442.\u043a. \u0441 \u043d\u0438\u043c\u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0434\u043e \u044f\u0432\u043d\u043e<br \/>\n\u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u043c\u0438. \u041a\u0430\u043a \u0432\u0441\u0435\u0433\u0434\u0430, \u044d\u0442\u043e<br \/>\n\u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0432 \u0431\u043b\u043e\u043a\u0435 &#171;finally&#187;:<\/p>\n<pre>\n    static AutoResetEvent e1 = new AutoResetEvent(false);\n    static AutoResetEvent e2 = new AutoResetEvent(false);\n\n    public static void Main() {\n        try {\n            \/\/... \u0442\u0435\u043b\u043e \u043c\u0435\u0442\u043e\u0434\u0430 Main\n            \/\/...\n        } finally {\n            e1.Close();\n            e2.Close();\n        }\n    }\n<\/pre>\n<\/p>\n<p>\n\u041e\u0431\u044a\u0435\u043a\u0442 \u0442\u0438\u043f\u0430 ManualResetEvent \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u0441\u044f \u043e\u0442 AutoResetEvent<br \/>\n\u0442\u0435\u043c, \u0447\u0442\u043e \u043e\u043d \u043d\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0435 (\u043d\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044c\u043d\u043e\u0435)<br \/>\n\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043c\u0435\u0442\u043e\u0434\u0430 WaitOne.<br \/>\n\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 &#171;Reset&#187;,<br \/>\n\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440<\/p>\n<pre>\n    ManualResetEvent e3 = new ManualResetEvent(false);\n    . . .\n    e3.WaitOne();\n    e3.Reset();\n<\/pre>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043e\u0431\u044a\u0435\u043a\u0442 \u0442\u0438\u043f\u0430 ManualResetEvent \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c<br \/>\n\u0434\u043b\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e \u043a\u0430\u043a\u043e\u043c-\u0442\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u0438 \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u043d\u0438\u0442\u044f\u043c.\n<\/p>\n<h3>\n<a name=\"Files\"><br \/>\n7. \u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438<br \/>\n<\/a><br \/>\n<\/h3>\n<p>\n\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 (\u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f<br \/>\n\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438\u043c\u0435\u043d System.IO:<\/p>\n<pre>\n    using System.IO;\n<\/pre>\n<p><p>\n\u0424\u0430\u0439\u043b\u044b \u0432 C# \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u043f\u043e\u0442\u043e\u043a\u0438 \u0431\u0430\u0439\u0442\u043e\u0432.<br \/>\n\u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u043f\u043e\u0442\u043e\u043a\u0430\u043c\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0444\u0430\u0439\u043b\u044b:<br \/>\n\u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442 \u0441\u043e\u0431\u043e\u0439 \u043f\u043e\u0442\u043e\u043a, \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u0442\u043e\u043a\u0438<br \/>\n\u043e\u0433\u0440\u0430\u043d\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0441\u0435\u0442\u044c\u044e (\u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432,<br \/>\n\u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0443 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439, \u0442\u0430\u043a\u0438\u0445,<br \/>\n\u043a\u0430\u043a Internet-\u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b TCP).\n<\/p>\n<p>\n\u0418\u043c\u0435\u0435\u0442\u0441\u044f \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 Stream, \u043e\u0442 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e\u0442\u0441\u044f \u0432\u0441\u0435<br \/>\n\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u043f\u043e\u0442\u043e\u043a\u043e\u0432 &#8212; FileStream \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0444\u0430\u0439\u043b\u043e\u0432,<br \/>\nNetworkStream \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u043e\u0431\u043c\u0435\u043d\u0430, MemoryStream<br \/>\n\u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u043e\u0442\u043e\u043a\u0430 \u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438, CryptoStream<br \/>\n\u0434\u043b\u044f \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 BufferedStream \u0434\u043b\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438.\n<\/p>\n<p>\n\u041f\u043e\u0442\u043e\u043a \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0442\u043a\u0440\u044b\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435, \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c<br \/>\n\u0438\u043b\u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u043f\u0438\u0441\u044c. \u0423 \u043a\u043b\u0430\u0441\u0441\u0430 Stream \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430<\/p>\n<pre>\n    bool CanRead\n    bool CanWrite\n<\/pre>\n<p>\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u043e\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c,<br \/>\n\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u0447\u0442\u0435\u043d\u0438\u0435 \u0438\u0437 \u043f\u043e\u0442\u043e\u043a\u0430 \u0438\u043b\u0438 \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u043f\u043e\u0442\u043e\u043a.<br \/>\n\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u0430\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0440\u044f\u043c\u043e\u0435<br \/>\n\u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e &#8212; \u044d\u0442\u043e<\/p>\n<pre>\n    bool CanSeek\n<\/pre>\n<p>\u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u043f\u0440\u044f\u043c\u043e\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432 \u043f\u043e\u0442\u043e\u043a\u0435<br \/>\n\u0442\u0438\u043f\u0430 FileStream, \u043d\u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432 NetworkStream.\n<\/p>\n<p>\n\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e<br \/>\n\u043c\u0435\u0442\u043e\u0434\u0430<\/p>\n<pre>\n    long Seek(long offset, SeekOrigin origin),\n<\/pre>\n<p>\u0433\u0434\u0435 origin \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f SeekOrigin.Begin,<br \/>\nSeekOrigin.End, SeekOrigin.Current,<br \/>\n\u0438\u043b\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430<\/p>\n<pre>\n    long Position,\n<\/pre>\n<p>\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0433\u043e \u043a\u0430\u043a \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f, \u0442\u0430\u043a \u0438 \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438.<br \/>\n\u0415\u0441\u043b\u0438 \u0434\u043b\u044f \u043f\u043e\u0442\u043e\u043a\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0440\u044f\u043c\u043e\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435,<br \/>\n\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u0435\u0433\u043e \u0434\u043b\u0438\u043d\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430<\/p>\n<pre>\n    long Length,\n<\/pre>\n<p>\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0433\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f, \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0434\u043b\u0438\u043d\u0443<br \/>\n\u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0435\u0442\u043e\u0434\u0430<\/p>\n<pre>\n    void SetLength(long length)\n<\/pre>\n<p>(\u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u043e\u0442\u043e\u043a \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0434\u043b\u044f<br \/>\n\u0437\u0430\u043f\u0438\u0441\u0438).\n<\/p>\n<p>\n\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u043e\u0442\u043e\u043a\u043e\u043c \u0442\u0438\u043f\u0430 Stream &#8212;<br \/>\n\u044d\u0442\u043e \u0447\u0442\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u043f\u0438\u0441\u044c \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0431\u0430\u0439\u0442\u043e\u0432:<\/p>\n<pre>\n    int Read(byte[] buffer, int offset, int len);\n    void Write(byte[] buffer, int offset, int len);\n<\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c len &#8212; \u044d\u0442\u043e \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0430\u0439\u0442\u043e\u0432 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f<br \/>\n\u0438\u043b\u0438 \u0437\u0430\u043f\u0438\u0441\u0438. \u041c\u0435\u0442\u043e\u0434 Read \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0445<br \/>\n\u0431\u0430\u0439\u0442\u043e\u0432 \u0438\u043b\u0438 0 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u043e\u043d\u0446\u0430 \u0444\u0430\u0439\u043b\u0430. \u041e\u0431\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 \u043c\u043e\u0433\u0443\u0442 \u0432\u043e\u0437\u0431\u0443\u0436\u0434\u0430\u0442\u044c<br \/>\n\u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 IOException \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430<br \/>\n\u0438\u043b\u0438 NotSupportedException, \u0435\u0441\u043b\u0438 \u0432\u0432\u043e\u0434 \u0438\u043b\u0438 \u0432\u044b\u0432\u043e\u0434 \u0434\u043b\u044f<br \/>\n\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u0433\u0434\u0430 \u0444\u0430\u0439\u043b \u043e\u0442\u043a\u0440\u044b\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430<br \/>\n\u0447\u0442\u0435\u043d\u0438\u0435).\n<\/p>\n<p>\n\u041e\u0431\u044a\u0435\u043a\u0442 \u0442\u0438\u043f\u0430 Stream \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0447\u0438\u0442\u0430\u0442\u044c \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u0430\u0439\u0442\u044b.<br \/>\n\u041a\u0430\u043a \u0431\u044b\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u0434\u043e \u0447\u0438\u0442\u0430\u0442\u044c \u0438\u043b\u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0438, \u0447\u0438\u0441\u043b\u0430 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435<br \/>\n\u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b? \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u0443\u0436\u0430\u0442 \u043a\u043b\u0430\u0441\u0441\u044b \u0442\u0438\u043f\u0430<br \/>\nReader \u0438 Writer, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, StreamReader \u0438 StreamWriter<br \/>\n\u0438\u043b\u0438 BinaryReader \u0438 BinaryWriter. \u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430<br \/>\n\u043a\u043b\u0430\u0441\u0441\u0430 \u0442\u0438\u043f\u0430 Reader \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0443\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e<br \/>\n\u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f &#171;\u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c&#187; \u043f\u043e\u0442\u043e\u043a\u0430. \u041f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre>\n    String fileName;\n    . . .\n    FileStream stream = null;\n    StreamReader reader = null;\n    try {\n        stream = new FileStream(\n            fileName, FileMode.Open, FileAccess.Read,\n            FileShare.Read\n        );\n        reader = new StreamReader(stream);\n\n        . . .\n\n    } catch (Exception e) {\n        Console.WriteLine(\"Cannot open a file: {0}\", e.Message);\n    }\n<\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u043e\u0442\u043e\u043a \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f<br \/>\n\u0434\u043b\u044f \u043d\u0435\u0433\u043e. \u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043f\u043e\u0442\u043e\u043a\u0430 \u0442\u0438\u043f\u0430 FileStream \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0438\u043c\u044f<br \/>\n\u0444\u0430\u0439\u043b\u0430, \u0441\u043f\u043e\u0441\u043e\u0431 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f (\u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0438\u043c\u0435\u044e\u0449\u0438\u0439\u0441\u044f \u0444\u0430\u0439\u043b FileMode.Open,<br \/>\n\u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 FileMode.Create, \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0438\u043c\u0435\u044e\u0449\u0438\u0439\u0441\u044f \u0438\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c<br \/>\n\u043d\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b \u043f\u0440\u0438 \u0435\u0433\u043e \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 FileMode.OpenOrCreate \u0438 \u0434\u0440\u0443\u0433\u0438\u0435),<br \/>\n\u0442\u0438\u043f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 (\u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u0435\u043d\u0438\u0435 FileAccess.Read, \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043f\u0438\u0441\u044c<br \/>\nFileAccess.Write, \u0447\u0442\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u043f\u0438\u0441\u044c FileAccess.ReadWrite), \u0430<br \/>\n\u0442\u0430\u043a\u0436\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u043c\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435 (\u043d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e<br \/>\n\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 FileShare.None, \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e<br \/>\n\u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 FileShare.Read, \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u043f\u0438\u0441\u044c<br \/>\nFileShare.ReadWrite, \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c FileShare.Write; \u044d\u0442\u043e\u0442<br \/>\n\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c, \u0442\u043e\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e<br \/>\n\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e FileShare.Read). \u041f\u0440\u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u0430<br \/>\n(\u0442.\u0435. \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u0444\u0430\u0439\u043b\u0430) \u0432\u043e\u0437\u0431\u0443\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437<br \/>\n\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432<br \/>\n(FileNotFoundException, IOException, SecurityException \u0438<br \/>\n\u0434\u0440\u0443\u0433\u0438\u0435).\n<\/p>\n<p>\n\u041c\u043e\u0436\u043d\u043e, \u043e\u0434\u043d\u0430\u043a\u043e, \u0441\u0440\u0430\u0437\u0443 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f \u0434\u043b\u044f \u0444\u0430\u0439\u043b\u0430, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u043e\u0442\u043e\u043a<br \/>\n\u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d \u043d\u0435\u044f\u0432\u043d\u043e. \u041f\u0440\u0438\u0432\u0435\u0434\u0435\u043c 2 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u0430:<\/p>\n<pre>\n    StreamReader reader = new StreamReader(fileName);\n    StreamReader reader = File.OpenText(fileName);\n<\/pre>\n<p>\u0412\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u0435\u0442\u043e\u0434 OpenText \u043a\u043b\u0430\u0441\u0441\u0430<br \/>\nFile, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b.\n<\/p>\n<p>\n\u0414\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0438 \u0438\u0437 \u043f\u043e\u0442\u043e\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434 ReadLine,<br \/>\n\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0431\u0430\u0439\u0442\u044b \u0438\u0437 \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0434\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 &#8216;\\n&#8217;<br \/>\n(\u0438\u043b\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 &#171;\\r\\n&#187;) \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 \u0441\u0442\u0440\u043e\u043a\u0438, \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0441\u0438\u043c\u0432\u043e\u043b:<\/p>\n<pre>\n    String line = reader.ReadLine();\n<\/pre>\n<p>\u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0431\u0430\u0439\u0442\u044b \u0438\u0437 \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442\u0441\u044f \u0432 \u0441\u0438\u043c\u0432\u043e\u043b\u044b,<br \/>\n\u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0443 (\u0434\u043b\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432<br \/>\n\u0432 C# \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f 16-\u0431\u0438\u0442\u043e\u0432\u0430\u044f \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430 Unicode).\n<\/p>\n<p>\n\u0414\u043b\u044f \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434 Close, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440,<\/p>\n<pre>\n    stream.Close();\n<\/pre>\n<\/p>\n<p>\n\u041f\u0440\u0438\u0432\u0435\u0434\u0435\u043c \u0434\u0432\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0445 \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438. \u041f\u0435\u0440\u0432\u0430\u044f<br \/>\n\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 &#171;<a href=\"projects\/Files\/List.cs\">List.cs<\/a>&#187;<br \/>\n\u0447\u0438\u0442\u0430\u0435\u0442 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b \u0438 \u0440\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043d\u0430<br \/>\n\u043a\u043e\u043d\u0441\u043e\u043b\u0438. \u0418\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438.<br \/>\n\u0414\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0442\u043e\u043a \u0442\u0438\u043f\u0430<br \/>\nFileStream, \u0430 \u0437\u0430\u0442\u0435\u043c \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f &#171;\u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c&#187; \u0442\u0438\u043f\u0430<br \/>\nStreamReader, \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u0439 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430.<br \/>\n\u0421\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0444\u0430\u0439\u043b\u0430 \u0432\u044b\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0430 \u043a\u043e\u043d\u0441\u043e\u043b\u044c.<\/p>\n<pre>\nusing System;\nusing System.IO;\n\nclass FileIOTest {\n    public static int Main(String[] args) {\n        int ret = 0;\n        if (args.Length == 0) {\n            Console.WriteLine(\"Missing file name\");\n            return 1;\n        }\n\n        FileStream stream = null;\n        StreamReader reader = null;\n        try {\n            stream = new FileStream(\n                args[0], FileMode.Open, FileAccess.Read,\n                FileShare.Read\n            );\n            reader = new StreamReader(stream);\n\n            \/\/ Other ways:\n            \/\/ reader = new StreamReader(args[0]);\n            \/\/ reader = File.OpenText(filename);\n\n            String line = reader.ReadLine();\n            while (line != null) {\n                Console.WriteLine(line);\n                line = reader.ReadLine();\n            }\n        } catch (Exception e) {\n            Console.WriteLine(e.Message);\n            ret = 1;\n        } finally {\n            if (stream != null) {\n                stream.Close();\n            }\n        }\n        return ret;\n    }\n}\n<\/pre>\n<\/p>\n<p>\n\u0412\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430<br \/>\n&#171;<a href=\"projects\/Files\/Code.cs\">Code.cs<\/a>&#187;<br \/>\n\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e<br \/>\n\u0444\u0430\u0439\u043b\u0430. \u0414\u043b\u044f \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e,<br \/>\n\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a\u0430\u043a \u0432\u0442\u043e\u0440\u043e\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438<br \/>\n(\u043f\u0435\u0440\u0432\u044b\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 &#8212; \u043f\u0443\u0442\u044c \u043a \u0448\u0438\u0444\u0440\u0443\u0435\u043c\u043e\u043c\u0443 \u0444\u0430\u0439\u043b\u0443).<br \/>\n\u0414\u043b\u044f \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0431\u0438\u0442\u043e\u0432\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f<br \/>\n\u0441\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u043c\u043e\u0434\u0443\u043b\u044e 2, \u0438\u043b\u0438 XOR (\u0438\u0441\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0435\u0435 \u0438\u043b\u0438).<br \/>\n\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0431\u0430\u0439\u0442\u043e\u0432<br \/>\n\u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430 \u043f\u0443\u0442\u0435\u043c \u0435\u0433\u043e \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u044f.<br \/>\n\u042d\u0442\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e<br \/>\n\u0431\u0430\u0439\u0442\u043e\u0432 \u0444\u0430\u0439\u043b\u0430. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u0444\u0430\u0439\u043b.<br \/>\n\u0422\u0430\u043a \u043a\u0430\u043a \u0434\u0432\u0443\u043a\u0440\u0430\u0442\u043d\u043e\u0435 \u043f\u043e\u0431\u0438\u0442\u043e\u0432\u043e\u0435 \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e \u043c\u043e\u0434\u0443\u043b\u044e 2<br \/>\n\u043e\u0434\u043d\u043e\u0433\u043e \u0438 \u0442\u043e\u0433\u043e \u0436\u0435 \u0431\u0430\u0439\u0442\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u0436\u0434\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0435\u0439<\/p>\n<pre>\n    (x^y)^y == x,\n<\/pre>\n<p>\u0442\u043e \u0434\u043b\u044f \u0434\u0435\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u0430 \u0436\u0435 \u0441\u0430\u043c\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430,<br \/>\n\u0447\u0442\u043e \u0438 \u0434\u043b\u044f \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0412 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u043c\u044b \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c<br \/>\n\u0444\u0430\u0439\u043b \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0438 \u0437\u0430\u043f\u0438\u0441\u0438, \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u044f \u043f\u043e\u0442\u043e\u043a \u0442\u0438\u043f\u0430 FileStream,<br \/>\n\u0437\u0430\u0442\u0435\u043c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0435\u0433\u043e &#171;\u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f&#187; \u0442\u0438\u043f\u0430<br \/>\nBinaryReader \u0438 &#171;\u043f\u0438\u0441\u0430\u0442\u0435\u043b\u044f&#187; \u0442\u0438\u043f\u0430 BinaryWriter. \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430<br \/>\n\u0441\u0447\u0438\u0442\u0430\u0432\u0430\u0435\u0442 \u0438\u0437 \u043f\u043e\u0442\u043e\u043a\u0430 \u0431\u043b\u043e\u043a \u0431\u0430\u0439\u0442\u043e\u0432 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 1024,<br \/>\n\u0448\u0438\u0444\u0440\u0443\u0435\u0442 \u0435\u0433\u043e, \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u044f \u043f\u043e\u0431\u0438\u0442\u043e\u0432\u043e \u043f\u043e \u043c\u043e\u0434\u0443\u043b\u044e 2 \u043a\u043b\u044e\u0447\u0435\u0432\u0443\u044e<br \/>\n\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0432 \u043f\u043e\u0442\u043e\u043a\u0435<br \/>\n\u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u043e \u0441\u0447\u0438\u0442\u0430\u043d\u043d\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430 \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439<br \/>\n\u0431\u043b\u043e\u043a \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u0444\u0430\u0439\u043b. \u0412\u043e\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b.<\/p>\n<pre>\nusing System;\nusing System.IO;\nusing System.Text;\n\nclass FileIOTest {\n    public static int Main(String[] args) {\n        int ret = 0;\n        if (args.Length == 0) {\n            Console.WriteLine(\"Missing file name\");\n            return 1;\n        }\n        if (args.Length &lt; 2) {\n            Console.WriteLine(&quot;Missing key string&quot;);\n            return 1;\n        }\n\n        FileStream stream = null;\n        BinaryReader reader = null;\n        BinaryWriter writer = null;\n        try {\n            stream = new FileStream(\n                args[0], FileMode.Open, FileAccess.ReadWrite\n            );\n            reader = new BinaryReader(stream);\n            writer = new BinaryWriter(stream);\n\n            byte[] buffer = new byte[1024];\n            byte[] key = new ASCIIEncoding().GetBytes(args[1]);\n            int keyLen = key.Length;\n\n            long fileSize = stream.Length;\n            long processed = 0;\n            long pos = 0;\n\n            while (processed  fileSize - processed)\n                    requested = (int)(fileSize - processed);\n                int bytesRead = reader.Read(buffer, 0, requested);\n                if (bytesRead &lt;= 0)\n                    break;\n                for (int i = 0; i &lt; bytesRead; i++) {\n                    buffer[i] ^= key[(pos + i) % keyLen];\n                }\n                stream.Seek(pos, SeekOrigin.Begin);\n                writer.Write(buffer, 0, bytesRead);\n                processed += bytesRead;\n                pos += bytesRead;\n            }\n        } catch (Exception e) {\n            Console.WriteLine(e.Message);\n            ret = 1;\n        } finally {\n            if (stream != null) {\n                stream.Close();\n            }\n        }\n        return ret;\n    }\n}\n<\/pre>\n<p>\u041e\u0442\u043c\u0435\u0442\u0438\u043c, \u0447\u0442\u043e \u0434\u043b\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430,<br \/>\n\u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u0430\u043a \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438, \u0432 \u043c\u0430\u0441\u0441\u0438\u0432<br \/>\n\u0431\u0430\u0439\u0442\u043e\u0432 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442 \u0442\u0438\u043f\u0430 ASCIIEncoding.<\/p>\n<pre>\n    byte[] key = new ASCIIEncoding().GetBytes(args[1]);\n<\/pre>\n<p>\u0421\u0438\u043c\u0432\u043e\u043b\u044b \u0432 \u044f\u0437\u044b\u043a\u0435 C# \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0443 Unicode, \u0442.\u0435. \u043a\u0430\u0436\u0434\u044b\u0439<br \/>\n\u0441\u0438\u043c\u0432\u043e\u043b \u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0434\u0432\u0443\u043c\u044f \u0431\u0430\u0439\u0442\u0430\u043c\u0438, \u0441\u0442\u0430\u0440\u0448\u0438\u0439 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0434\u043b\u044f<br \/>\n\u043b\u0430\u0442\u0438\u043d\u0441\u043a\u0438\u0445 \u0431\u0443\u043a\u0432 \u0440\u0430\u0432\u0435\u043d \u043d\u0443\u043b\u044e. \u041c\u0435\u0442\u043e\u0434 GetBytes \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0442\u0438\u043f\u0430<br \/>\nASCIIEncoding \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 \u0434\u0432\u0443\u0445\u0431\u0430\u0439\u0442\u043d\u044b\u0439 Unicode-\u0441\u0438\u043c\u0432\u043e\u043b<br \/>\n\u0441\u0442\u0440\u043e\u043a\u0438 \u043a \u043e\u0434\u043d\u043e\u0431\u0430\u0439\u0442\u043e\u0432\u043e\u043c\u0443 ASCII-\u0441\u0438\u043c\u0432\u043e\u043b\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f<br \/>\n\u043f\u0440\u0438 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0445 \u041e\u0442\u0441\u044e\u0434\u0430: http:\/\/math.msu.su\/~vvb\/2course\/Borisenko\/AddEdu\/CSharp\/CSharp.html<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[32],"tags":[],"class_list":["post-505","post","type-post","status-publish","format-standard","hentry","category-csharp"],"_links":{"self":[{"href":"https:\/\/infobase.athn.ru\/program\/wp-json\/wp\/v2\/posts\/505","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/infobase.athn.ru\/program\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/infobase.athn.ru\/program\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/infobase.athn.ru\/program\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/infobase.athn.ru\/program\/wp-json\/wp\/v2\/comments?post=505"}],"version-history":[{"count":0,"href":"https:\/\/infobase.athn.ru\/program\/wp-json\/wp\/v2\/posts\/505\/revisions"}],"wp:attachment":[{"href":"https:\/\/infobase.athn.ru\/program\/wp-json\/wp\/v2\/media?parent=505"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/infobase.athn.ru\/program\/wp-json\/wp\/v2\/categories?post=505"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/infobase.athn.ru\/program\/wp-json\/wp\/v2\/tags?post=505"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}