要使此代码正常工作,我该怎么做?
我只是希望该类在完成加载后引发一个事件,并让消耗类对其做出反应。
它在OnLoaded上收到错误消息,指出它为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
之前将其附加:public FileManager(LoadedHandler handler) {
this.OnLoaded += handler;
Name = "this is the test file manager";
OnLoaded(this, new FileManagerArgs("no errors"));
}
关于c# - 为什么在自定义OnLoaded事件中得到“对象引用未设置为对象的实例”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2229959/