C# 为什么在自定义的onload事件中会出现“对象引用未设置为对象实例”的情况?

C# 为什么在自定义的onload事件中会出现“对象引用未设置为对象实例”的情况?,c#,events,event-handling,C#,Events,Event Handling,我要怎么做才能让代码正常工作 我只想让类在加载完成后抛出一个事件,并让消费类对此作出反应 它在onload时收到一个错误,表示它为null using System; using System.Windows; namespace TestEventLoaded8282 { public partial class Window1 : Window { public Window1() { InitializeCompon

我要怎么做才能让代码正常工作

我只想让类在加载完成后抛出一个事件,并让消费类对此作出反应

它在onload时收到一个错误,表示它为null

using System;
using System.Windows;

namespace TestEventLoaded8282
{
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();

            FileManager fm = new FileManager();
            fm.OnLoaded += new FileManager.LoadedHandler(fm_OnLoaded);
        }

        void fm_OnLoaded(object obj, FileManagerArgs args)
        {
            Console.WriteLine("the file manager is loaded: " + args.Message); 
        }
    }

    public class FileManager
    {
        public string Name { get; set; }

        public delegate void LoadedHandler(object obj, FileManagerArgs args);
        public event LoadedHandler OnLoaded;

        public FileManager()
        {
            Name = "this is the test file manager";
            OnLoaded(this, new FileManagerArgs("no errors"));
        }
    }

    public class FileManagerArgs : EventArgs
    {
        public string Message { get; set; }

        public FileManagerArgs(string message)
        {
            Message = message;
        }
    }
}
此代码在附加事件处理程序之前调用OnLoaded:

public Window1() {
    InitializeComponent();
    FileManager fm = new FileManager();
   // The next line attaches a handler, but
   // not until the constructor finishes
}
它执行以下操作:

public FileManager() {
        Name = "this is the test file manager";
        OnLoaded(this, new FileManagerArgs("no errors")); // No handler yet!
}
要解决此问题,请要求侦听器委托作为FileManager构造函数参数,并在调用OnLoaded之前附加它:

此代码在附加事件处理程序之前调用OnLoaded:

public Window1() {
    InitializeComponent();
    FileManager fm = new FileManager();
   // The next line attaches a handler, but
   // not until the constructor finishes
}
它执行以下操作:

public FileManager() {
        Name = "this is the test file manager";
        OnLoaded(this, new FileManagerArgs("no errors")); // No handler yet!
}
要解决此问题,请要求侦听器委托作为FileManager构造函数参数,并在调用OnLoaded之前附加它:


谢谢,这帮助我得到了我的代码来问我最初想发布的问题:,也许是同一个问题,我将在这里处理这个代码。太好了!其他几个人先问了你的后续问题,把它搞定谢谢,这帮助我得到了我的代码来问我最初想发布的问题:,也许是同一个问题,我将在这里处理这个代码。太好了!其他几个人先问了你的后续问题,把它搞定