Как лучше оформить event? - C#
Формулировка задачи:
Добрый день, имеется такая конструкция вызова эвента:
Она хорошо работает, но хочется узнать, как её можно переписать так чтобы “ TCP_OnReadInvok(string message) //Invoke фунция.” Оказался внутри класса. А с наружи было только один метод с эвентом.
Ниже пример желаемого результата (В результате отсутствует конструкция InvokeRequired, this.BeginInvoke).
Листинг программы
- namespace name_Space_Main_Form
- {
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- TCPListener1.TCP_OnReadEven += TCP_OnReadInvok;
- }
- public void TCP_OnReadInvok(string message) //Invoke фунция.
- {
- if (InvokeRequired)
- {
- this.BeginInvoke(new TCP_OnReadDelegate(this.TCP_OnRead), message);
- }
- else
- {
- TCP_OnRead(message);
- }
- }
- public void TCP_OnRead(string message)
- {
- richTextBox1.AppendText("mess: >" + message + "<\r\n");
- }
- }
- }
- namespace Name_Space_Class
- {
- public delegate void TCP_OnReadDelegate(string sessionId);
- class Class_Name
- {
- public event TCP_OnReadDelegate TCP_OnReadEven;
- private void ObrabotkaVxodja5egoKlienta(TcpClient Client)
- {
- TCP_Client_OnMessIncomingEven?.Invoke(Request);
- }
- }
- }
Листинг программы
- namespace name_Space_Main_Form
- {
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- TCPListener1.TCP_OnReadEven += TCP_ OnRead;
- }
- public void TCP_OnRead(string message)
- {
- richTextBox1.AppendText("mess: >" + message + "<\r\n");
- }
- }
- }
Решение задачи: «Как лучше оформить event?»
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;
- using System.Threading.Tasks;
- namespace WindowsFormsApplication1 {
- public partial class Form1 : Form {
- SynchronizationContext ctx;
- public Form1() {
- InitializeComponent();
- ctx = SynchronizationContext.Current;
- button1.Click += new EventHandler(button1_Click);
- }
- void button1_Click(object sender, EventArgs e) {
- TestClass test = new TestClass();
- test.ClassEvent += new EventHandler(test_ClassEvent);
- test.Run();
- }
- void test_ClassEvent(object sender, EventArgs e) {
- ctx.Post((obj) => {
- label1.Text = "Hello!";
- }, null);
- }
- }
- public class TestClass {
- public event EventHandler ClassEvent;
- public void Run() {
- Task.Factory.StartNew(() => {
- Thread.Sleep(3000);
- OnClassEvent(EventArgs.Empty);
- });
- }
- protected virtual void OnClassEvent(EventArgs e) {
- if (ClassEvent != null) {
- ClassEvent(this, e);
- }
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д