我对活动的理解有问题。由于某些原因,我无法订阅我的活动。视觉工作室在说
错误CS0029无法将类型'void'隐式转换为 'FileSystemWatcher.FileSystemWatcher.Handler'FileSystemWatcher C:\ Users \ Diord \ source \ repos \ FileSystemWatcher \ FileSystemWatcher \ Program.cs 16有效
当我这样做
fileSystemWatcher.Changed + = ShowMessage();
class Program
{
static void Main(string[] args)
{
FileSystemWatcher fileSystemWatcher = new FileSystemWatcher("C:\\");
//next line is highlighted
fileSystemWatcher.Changed += ShowMessage();
}
public void ShowMessage()
{
Console.WriteLine("Hello Event!");
}
}
class FileSystemWatcher
{
readonly string _path;
private string[] Files { get; set; }
public FileSystemWatcher(string path)
{
_path = path;
}
public delegate void Handler();
public event Handler Changed;
}
答案 0 :(得分:7)
您必须从ShowMessage()中删除括号,因为这是在调用函数,而不是将方法“引用”到事件。
错误消息表明,“ void”(函数的结果)不能附加到事件上。
在代码中:
fileSystemWatcher.Changed += ShowMessage;
答案 1 :(得分:0)
该错误是由于方法签名(左部分)和调用结果(右部分)之间的分配不正确引起的。省略方括号表示您对签名感兴趣,而不是有效地调用该方法。
这可以解决您的问题:
fileSystemWatcher.Changed += ShowMessage;
但是,在您的示例中,您什么也看不到,因为您的应用程序将立即退出,因为您没有消息泵或者只是您没有在等待什么。
此外,如果主线程正在等待用户输入,则您可能不会收到该事件。
请咨询FileSysteWatcher
documentation,以了解如何使用它。尤其是对于线程(由于您在控制台应用程序中,因此将需要线程)。