Обработка событий дочерних потоков в главном потоке - 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;
}
}
}