В чем разница между EndInvoke и BeginInvoke? - C#

Узнай цену своей работы

Формулировка задачи:

Если выполнить в отдельном потоке нижеследующие конструкции:
Листинг программы
  1. if (this.InvokeRequired)
  2. {
  3. this.Invoke((Action)(() =>
  4. {
  5. this.Close();
  6. }));
  7. }
Данная конструкция не сработает.
Листинг программы
  1. this.BeginInvoke((MethodInvoker)delegate { this.Close(); });
Данная конструкция сработает. Читал, что в Envoke происходит ожидание вызывающего потока завершения UI потока, а в BeginEnvoke не происходит. Но я так и не разъяснил почему Close работает в одном и не работает в другом.

Решение задачи: «В чем разница между EndInvoke и BeginInvoke?»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using System.Threading;
  10.  
  11. namespace WindowsFormsApplication6 {
  12.     public partial class Form1 : Form {
  13.         Thread mainThread = Thread.CurrentThread;
  14.         public Form1() {
  15.             InitializeComponent();
  16.             this.FormClosing += new FormClosingEventHandler(Form1_FormClosing);
  17.             button1.Click += new EventHandler(button1_Click);
  18.         }
  19.  
  20.         void Form1_FormClosing(object sender, FormClosingEventArgs e) {
  21.             if (mainThread != null) {
  22.                 if (mainThread.IsAlive) {
  23.                     e.Cancel = true;
  24.                 }
  25.             }
  26.         }
  27.  
  28.         void button1_Click(object sender, EventArgs e) {
  29.             new Thread(Foo).Start();
  30.         }
  31.         void Foo() {
  32.             if (this.InvokeRequired) {
  33.                 this.BeginInvoke((Action)(() => this.Close()));
  34.             }
  35.         }
  36.     }
  37. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы