diff --git a/windows/TweetDuck/Program.cs b/windows/TweetDuck/Program.cs index 7e32e8cc..dfc02d37 100644 --- a/windows/TweetDuck/Program.cs +++ b/windows/TweetDuck/Program.cs @@ -45,6 +45,7 @@ static class Program { internal static void SetupWinForms() { Win.Application.EnableVisualStyles(); Win.Application.SetCompatibleTextRenderingDefault(false); + Win.LegacyWinForms.EnsureValid(); } [STAThread] diff --git a/windows/TweetLib.WinForms.Legacy/Windows/Forms/Command2.cs b/windows/TweetLib.WinForms.Legacy/Windows/Forms/Command2.cs index a60f6720..9fe39e06 100644 --- a/windows/TweetLib.WinForms.Legacy/Windows/Forms/Command2.cs +++ b/windows/TweetLib.WinForms.Legacy/Windows/Forms/Command2.cs @@ -4,10 +4,16 @@ namespace System.Windows.Forms { internal sealed class Command2 { private static readonly Type Type = typeof(Form).Assembly.GetType("System.Windows.Forms.Command"); - private static readonly ConstructorInfo Constructor = Type.GetConstructor(new Type[] { typeof(ICommandExecutor) }) ?? throw new NullReferenceException(); - private static readonly MethodInfo DisposeMethod = Type.GetMethod("Dispose", BindingFlags.Instance | BindingFlags.Public) ?? throw new NullReferenceException(); - private static readonly PropertyInfo IDProperty = Type.GetProperty("ID") ?? throw new NullReferenceException(); + private static readonly ConstructorInfo Constructor = Type.GetConstructor(new Type[] { typeof(ICommandExecutor) }); + private static readonly MethodInfo DisposeMethod = Type.GetMethod("Dispose", BindingFlags.Instance | BindingFlags.Public); + private static readonly PropertyInfo IDProperty = Type.GetProperty("ID"); + internal static void EnsureValid() { + if (Constructor == null || DisposeMethod == null || IDProperty == null) { + throw new InvalidOperationException(); + } + } + public int ID { get; } private readonly object cmd; diff --git a/windows/TweetLib.WinForms.Legacy/Windows/Forms/ContextMenu.cs b/windows/TweetLib.WinForms.Legacy/Windows/Forms/ContextMenu.cs index f20c053b..14a725c4 100644 --- a/windows/TweetLib.WinForms.Legacy/Windows/Forms/ContextMenu.cs +++ b/windows/TweetLib.WinForms.Legacy/Windows/Forms/ContextMenu.cs @@ -7,8 +7,14 @@ namespace System.Windows.Forms { public sealed class ContextMenu : Menu { - private static readonly FieldInfo NotifyIconWindowField = typeof(NotifyIcon).GetField("window", BindingFlags.Instance | BindingFlags.NonPublic) ?? throw new InvalidOperationException(); - + private static readonly FieldInfo NotifyIconWindowField = typeof(NotifyIcon).GetField("_window", BindingFlags.Instance | BindingFlags.NonPublic); + + internal static void EnsureValid() { + if (NotifyIconWindowField == null) { + throw new InvalidOperationException(); + } + } + public event EventHandler Popup; public void Show(Control control, Point pos) { diff --git a/windows/TweetLib.WinForms.Legacy/Windows/Forms/LegacyWinForms.cs b/windows/TweetLib.WinForms.Legacy/Windows/Forms/LegacyWinForms.cs new file mode 100644 index 00000000..e7cab516 --- /dev/null +++ b/windows/TweetLib.WinForms.Legacy/Windows/Forms/LegacyWinForms.cs @@ -0,0 +1,8 @@ +namespace System.Windows.Forms; + +public static class LegacyWinForms { + public static void EnsureValid() { + Command2.EnsureValid(); + ContextMenu.EnsureValid(); + } +}