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