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

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

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

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

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

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
 
namespace WindowsFormsApplication6 {
    public partial class Form1 : Form {
        Thread mainThread = Thread.CurrentThread;
        public Form1() {
            InitializeComponent();
            this.FormClosing += new FormClosingEventHandler(Form1_FormClosing);
            button1.Click += new EventHandler(button1_Click);
        }
 
        void Form1_FormClosing(object sender, FormClosingEventArgs e) {
            if (mainThread != null) {
                if (mainThread.IsAlive) {
                    e.Cancel = true;
                }
            }
        }
 
        void button1_Click(object sender, EventArgs e) {
            new Thread(Foo).Start();
        }
        void Foo() {
            if (this.InvokeRequired) {
                this.BeginInvoke((Action)(() => this.Close()));
            }
        }
    }
}

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


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

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

11   голосов , оценка 4 из 5
Похожие ответы