using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using System.Collections.Concurrent;
using System.Xml.Linq;
namespace ConsoleApp_Net5Test
{
internal class AddPage
{
private static event EventHandler ShowMsg;
public static void TryAddEvent(EventHandler handler)
{
if (ShowMsg == null)
{
goto DO_ADD;
}
Delegate[] delegates = ShowMsg.GetInvocationList();
bool right = delegates.Any(g => g.Method == handler.Method);
if (right)
{
return;
}
DO_ADD:
ShowMsg += handler;
}
public static void TryRemoveEvent(EventHandler handler)
{
if (handler == null) { return; }
Delegate[] delegates = ShowMsg.GetInvocationList();
var find = delegates.FirstOrDefault(g => g.Method == handler.Method) as EventHandler;
if (find != null)
{
ShowMsg -= find;
}
}
public void Add(int id, int code, string color)
{
Console.WriteLine($"{id},{code},{color},添加一条记录" + DateTime.Now.ToShortTimeString());
ShowMsg?.Invoke(id, new EventArgs());
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp_Net5Test
{
internal class ListPageShow
{
public ListPageShow()
{
AddPage.TryAddEvent(PageShow);
}
static int count = 0;
public void PageShow(object obj, EventArgs eventArgs)
{
Console.WriteLine(obj.ToString() + "刷新数据列表" + " ," + DateTime.Now.Ticks);
count++;
}
}
}
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Net.Http;
using System.Linq;
namespace ConsoleApp_Net5Test
{
class Program
{
public static void Qidong(object obj, EventArgs eventArgs)
{
Console.WriteLine(obj.ToString() + "武松打虎" + " " + DateTime.Now.Ticks);
}
static int count = 0;
static void Main(string[] args)
{
AGAIN:
AddPage.TryAddEvent(Qidong);
AddPage.TryAddEvent(delegate { Console.WriteLine("启动类触发" + " " + DateTime.Now.Ticks); });
ListPageShow show = new ListPageShow();
show.PageShow(1, new EventArgs());
if (count > 0 && count % 2 == 0)
{
AddPage.TryRemoveEvent(show.PageShow);
}
AddPage addPage = new AddPage();
addPage.Add(999, 222, "红色");
Console.WriteLine("");
count++;
goto AGAIN;
Console.ReadLine();
}
}
}