Обработка событий дочерних потоков в главном потоке - C#
Формулировка задачи:
Многопоточное приложение
Можно ли так сделать?
Генерируем событие в Start и обрабатываем в главном потоке. Если да, то как?
Thread thread = new Thread(Start); thread.Start(port);
Решение задачи: «Обработка событий дочерних потоков в главном потоке»
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 GUI_Threads { public partial class Form1 : Form { public Form1() { InitializeComponent(); this.Load += new EventHandler(Form1_Load); } void Form1_Load(object sender, EventArgs e) { EventGenerator generator = new EventGenerator(); generator.threadEvent += new EventHandler<ThreadEventArgs>(generator_threadEvent); generator.Start(); } void generator_threadEvent(object sender, ThreadEventArgs e) { string info = string.Format("Event number {0} from Thread {1}", e.EventCount, e.ThreadID); this.Invoke((Action)(() => { this.Text = info; })); } } public class EventGenerator { public event EventHandler<ThreadEventArgs> threadEvent = delegate { }; public void Start() { new Thread(() => { for (int i = 0; i < 10; i++) { threadEvent(this, new ThreadEventArgs(Thread.CurrentThread.ManagedThreadId, i)); Thread.Sleep(1000); } }){IsBackground = true}.Start(); } } public class ThreadEventArgs : EventArgs { public readonly int ThreadID; public readonly int EventCount; public ThreadEventArgs(int id, int count) { ThreadID = id; EventCount = count; } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д