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