返回错误
CS0029
C#无法将类型'void'隐式转换为'System.EventHandler'
在此使用该功能:
gameTimer.Tick += UpdateScreen();
函数是:
private void UpdateScreen()
{
if(Settings.GameOver == true)
{
if (Input.KeyPressed(Keys.Enter))
{
StartGame();
}
}
else
{
if (Input.KeyPressed(Keys.Right) && Settings.direction != Direction.Left)
Settings.direction = Direction.Right;
else if (Input.KeyPressed(Keys.Left) && Settings.direction != Direction.Right)
Settings.direction = Direction.Left;
else if (Input.KeyPressed(Keys.Up) && Settings.direction != Direction.Down)
Settings.direction = Direction.Up;
else if (Input.KeyPressed(Keys.Down) && Settings.direction != Direction.Up)
Settings.direction = Direction.Down;
MovePlayer();
}
pbCanvas.Invalidate();
}
答案 0 :(得分:3)
您应该为方法分配不带括号,因为您正试图分配方法的结果(由于void
而没有)
该方法还必须具有正确的参数。
gameTimer.Tick += UpdateScreen;
private void UpdateScreen(object sender, EventArgs e)
{
// ...
}
或者如果您不想更改method参数。您可以使用lambda表达式。 (这将创建一个新的委托,该委托将调用UpdateScreen方法。(wrapper)
gameTicker.Tick += (s, ee) => UpdateScreen();
答案 1 :(得分:0)
不需要括号。您也可以这样做:
gameTimer.Tick += (s, ev) => { UpdateTimer(s, ev); }
并修复UpdateTimer方法。
或者您也可以执行以下操作:
gameTimer.Tick += new EventHandler<object>(UpdateTimer);
有关与会代表的更多信息:
https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/delegates/
更多有关DispatchTimer的信息: