C#请求插件
本文关键字:插件 请求 | 更新日期: 2023-09-27 18:23:58
我正在尝试在我的应用程序中实现简单的插件系统,但我与插件的通信有问题。
我制作了我的插件接口:
public interface IAlgorithm
{
/// <summary>
/// New request in current simulation tick - all logic should be run after request
/// </summary>
/// <param name="pTime">Simulation time in [ms] from simulation start</param>
/// <param name="pObject">Manipulating object</param>
/// <param name="pWorld">Current world</param>
void Request(int pTime, PhysicalObject pObject, World pWorld);
}
接下来我创建了挂钩键盘插件:
public class Main : IAlgorithm
{
private int m_Direction;
private readonly GlobalKeyboardHook m_Hook = new GlobalKeyboardHook();
public Main()
{
m_Hook.HookedKeys.Add(Keys.Up);
m_Hook.HookedKeys.Add(Keys.Down);
m_Hook.HookedKeys.Add(Keys.Right);
m_Hook.HookedKeys.Add(Keys.Left);
m_Hook.KeyDown += KeyClicked;
}
private void KeyClicked(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Down:
m_Direction = 180;
break;
case Keys.Up:
m_Direction = 0;
break;
case Keys.Left:
m_Direction = 90;
break;
case Keys.Right:
m_Direction = 270;
break;
}
}
public void Request(int pTime, PhysicalObject pObject, World pWorld)
{
pObject.Movement.Power = 100;
pObject.Movement.Direction = m_Direction;
}
}
接下来,在我的主程序中,我尝试使用我的插件,如下所示:
var myAssembly = Assembly.LoadFile(myPath).GetTypes().First(x => x.Name == "Main");
IAlgorithm myAlgorithm = ((IAlgorithm)Activator.CreateInstance(myAssembly ));
它正在工作,但如果我想提出一些插件的请求
myAlgorithm.Request(pSimulationTime, myPhysicalObject, pWorld);
在那之后,我在myPhysicalObject 中没有任何更改
但是如果我使用MessageBox:
myAlgorithm.Request(pSimulationTime, myPhysicalObject, pWorld);
MessageBox.Show(myPhysicalObject.Movement.Direction)
我可以看到以MB为单位的正确值。
我不知道我的逻辑中有什么不正确的地方,也不明白为什么在停顿了一段时间后它仍然有效。你有什么想法吗??
如果您没有按下任何键,我希望它会给您0
。
既然您已经钩住了方向键,那么在void KeyClicked(object sender, KeyEventArgs e)
中放入一条log/console.writeline语句来找出其中的神奇之处。