2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Invoke इत्यस्य सारः केवलं विधिः एव, विधिः च वस्तुद्वारा आह्वयितुं अर्हति ।
सामान्यतया यदा Invoke इत्यस्य वास्तविकरूपेण उपयोगः भवति तदा केवलं द्वौ परिस्थितौ स्तः ।
ControlInvoke इति
DelegateInvoke इति
अन्येषु शब्देषु, Invoke इत्यस्य पूर्वं नियन्त्रणं वा प्रतिनिधिवस्तु वा भवति ।
नियन्त्रणस्य Invoke इत्यस्य उपयोगः सामान्यतया क्रॉस्-थ्रेड्-प्रवेशसमस्यानां समाधानार्थं भवति उदाहरणार्थं, यदि भवान् बटनं चालयितुम् इच्छति तर्हि भवान् button.Invoke इत्यस्य उपयोगं कर्तुम् इच्छति यदि भवान् label.Invoke इत्यस्य उपयोगं कर्तव्यः everyone will find it very troublesome , यदि अहं बटनं लेबलं च द्वयोः संचालनं कर्तुम् इच्छामि तर्हि अहं तान् एकत्र लिखितुं शक्नोमि वा? निश्चयेन।
वयं जानीमः यत् मुख्यं रूपं Form अस्ति, तथा च Form स्वाभाविकतया Control इत्यस्य उत्तराधिकारं प्राप्नोति, अतः Form इत्यस्य Invoke मेथड् अपि अस्ति, यत् प्रत्यक्षतया Form.Invoke इति आह्वयितुं शक्नोति एतत् अस्माकं सामान्यम् this.Invoke अस्ति । अत एव केषाञ्चन Invokes इत्यस्य पुरतः किमपि नास्ति वस्तुतः तेषां पुरतः एतत् अस्ति, परन्तु तत् लोपितम् अस्ति ।
उदाहरण:
this.Invoke(new Action(() =>{ button1.Text = "关闭";}));
Delegate इत्यस्य Invoke वस्तुतः निष्पादनार्थं thread pool तः delegate मेथड् आह्वयति Invoke एकः synchronous method अस्ति तथा च UI thread इत्येतत् आह्वयति ।
- void PrintMessage(string message)
- {
- Console.WriteLine(message);
- }
- MyDelegate myDelegate = PrintMessage;
- myDelegate.Invoke("Hello, World!"); // 使用 Invoke 方法调用委托引用的方法`
वयं पूर्वमेव जानीमः यत् async/await, BackGroudWorker class तथा TPL (Task Parallel Library) C# मध्ये विद्यन्ते । अवश्यं, C# इत्यत्र अद्यापि अतुल्यकालिकप्रोग्रामिङ्गस्य समर्थनार्थं केचन पुरातनाः प्रतिमानाः सन्ति ।
- delegate long MyDel(int first, int second);
-
- class Program
- {
- static long Sum(int x, int y)
- {
- Console.WriteLine("------Inside Sum@{0}", DateTime.Now.ToString());
- Thread.Sleep(2000);
- return x + y;
- }
-
- static void Main(string[] args)
- {
- MyDel del = new MyDel(Sum);
-
- Console.WriteLine("Before BeginInvoke---@{0}", DateTime.Now.ToString());
- IAsyncResult iar = del.BeginInvoke(3, 5, null, null);
- Console.WriteLine("After BeginInvoke@{0}", DateTime.Now.ToString());
-
- Console.WriteLine("Doing stuff@{0}", DateTime.Now.ToString());
-
- long result = del.EndInvoke(iar);
- Console.WriteLine("End Invoke@{0}", DateTime.Now.ToString());
-
- Console.WriteLine("After EndInvoke: {0}", result);
-
- Console.ReadKey();
-
- }
- }
उपरिष्टात् कोडः एकं प्रतिनिधिं MyDel परिभाषयति, तथा च आह्वानसमये Sum मेथड् स्वस्य ऑब्जेक्ट् प्रति पारयति । सामान्यतया यदा वयम् एतत् delegate object आह्वयामः तदा एतत् स्वस्य call list मध्ये समाविष्टान् methods आह्वयिष्यति । यथा मेथड् आह्वयति तथा एतत् समन्वयेन क्रियते ।
परन्तु यदि delegate ऑब्जेक्ट् इत्यस्य call list मध्ये केवलम् एकः मेथड् (reference मेथड्) अस्ति तर्हि एतत् मेथड् अतुल्यकालिकरूपेण निष्पादयितुं शक्नोति । एतत् कर्तुं BeginInovke तथा EndInvoke इत्येतयोः उपयोगः भवति । वयं तस्य उपयोगं निम्नलिखितरीत्या कर्तुं शक्नुमः ।
* 1 यदा वयं BeginInvoke मेथड् आह्वयेम तदा सः स्वतन्त्रे थ्रेड् इत्यत्र reference मेथड् इत्यस्य निष्पादनं आरभते तत्क्षणमेव मूल थ्रेड् प्रति आगच्छति । मूलसूत्रं निरन्तरं कर्तुं शक्नोति, सन्दर्भविधिः च इष्टसूत्रे समानान्तरेण निष्पादिता भविष्यति ।
* 2 यदा प्रोग्रामः सम्पन्नस्य अतुल्यकालिकविधेः परिणामं प्राप्तुम् इच्छति तदा सः BeginInvoke द्वारा प्रत्यागतस्य IAsyncResult इत्यस्य IsCompleted गुणस्य जाँचं कर्तुं शक्नोति, अथवा प्रतिनिधिनिष्पादनस्य समाप्तेः प्रतीक्षां कर्तुं प्रतिनिधिस्य EndInvoke विधिं आह्वयितुं शक्नोति
उपर्युक्तप्रयोगप्रक्रिया त्रयः गुणाः प्रति नेति- १.
* 1Wait-til completetion मूलसूत्रेण अतुल्यकालिकविधिं आरभ्य अन्यत् किञ्चित् प्रसंस्करणं कृत्वा मूलसूत्रं बाधितं कृत्वा अतुल्यकालिकविधिस्य समाप्तिपर्यन्तं प्रतीक्षां करोति।
* 2 मतदानं कृत्वा मूलसूत्रं नियमितरूपेण परीक्षते यत् आरब्धः सूत्रः सम्पन्नः अस्ति वा यदि न तर्हि अन्यकार्यं निरन्तरं कर्तुं शक्नोति ।
* 3 कॉलबैकस्य मूलधागः सर्वदा प्रतीक्षमाणः अथवा आरम्भकधागः सम्पन्नः अस्ति वा इति न जाँचं विना निष्पादितः भवति आरभकसूत्रे सन्दर्भनिर्गमनस्य समाप्तेः अनन्तरं आरम्भकसूत्रः कॉलबैकविधिं आह्वयति, तथा च कॉलबैकविधिः परिणामं संसाधयिष्यति EndInvoke इत्यस्य आह्वानात् पूर्वं अतुल्यकालिकविधेः ।
C # थ्रेड् डेलिगेट् BeginInvoke तथा EndInvoke_C # Tutorial_Script Home इत्यस्य उपयोगः