在同一堂课中,我有:
public partial class MainWindow : Window {
// event handler
private static void messageReceived (object sender, messageReceivedEvent args)
{
//some code
stopProcesses()
}
void stopProcesses()
{
//some code
}
}
在事件处理程序中,对stopProcesses()的调用会在标题中给出错误:非静态字段,方法或属性需要对象引用' MainWindow.stopProcesses'。 他们在同一个班级,我不能将stopProcesses作为静态因为我必须拥有每个变量和每个方法,如果这个类是静态的,那不是重点。 我不知道如何从静态事件处理程序调用非静态方法,但该方法的对象引用是什么?
答案 0 :(得分:4)
最好的解决方案是使messageReceived
实例作用域而不是静态。
private void messageReceived (object sender, messageReceivedEvent args) {}
如果你想保持静态,那么你必须使用sender
实例作为对MainWindow
实例的引用,你所要做的就是投射它。
private static void messageReceived (object sender, messageReceivedEvent args)
{
((MainWindow)sender).stopProcesses();
}