В чем разница между 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())); } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д