Open gomidas opened 6 years ago
I get this error when I close app. what am I doing wrong ?
InputHandler.cs
using SharpDX.Multimedia; using SharpDX.RawInput; using System; using System.Threading; /*using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;*/ using System.Windows.Forms; namespace CubeApp { public class InputHandler { public bool KeyRight = false; public bool KeyLeft = false; public bool KeyDown = false; public bool KeyUp = false; //COMMON WASD (FPShooter) KEYS public bool KeyW = false; public bool KeyA = false; public bool KeyS = false; public bool KeyD = false; //COMMON ROTATION KEYS (E,Q) public bool KeyE = false; public bool KeyQ = false; //MOUSE BUTTONS public bool MouseLeftButton = false; public bool MouseRightButton = false; public bool MouseMiddleButton = false; //CAMERA ROTATION public bool KeyR = false; public bool KeyT = false; public bool KeyY = false; public bool KeyU = false; public InputHandler(RenderForm_EX form) { form.inputHandler = this; // setup the device if (form.IsHandleCreated) { Device.RegisterDevice(UsagePage.Generic, UsageId.GenericMouse, DeviceFlags.None); Device.MouseInput += (sender, args) => form.Invoke(new UpdateTextCallback(UpdateMouseText), args); Device.RegisterDevice(UsagePage.Generic, UsageId.GenericKeyboard, DeviceFlags.None); Device.KeyboardInput += (sender, args) => form.Invoke(new UpdateTextCallback(UpdateKeyboardText), args); } } void UpdateKeyboardText(RawInputEventArgs rawArgs) { var args = (KeyboardInputEventArgs)rawArgs; if (args.Key == Keys.Right && args.State == KeyState.KeyDown ) { KeyRight = true; Console.WriteLine(Keys.Right+"[Down]"); } if (args.Key == Keys.Right && args.State == KeyState.KeyUp ) { KeyRight = false; Console.WriteLine(Keys.Right + "[Up]"); } if (args.Key == Keys.Left && args.State == KeyState.KeyDown ) { KeyLeft = true; Console.WriteLine(Keys.Right + "[Down]"); } if (args.Key == Keys.Left && args.State == KeyState.KeyUp ) { KeyLeft = false; Console.WriteLine(Keys.Right + "[Up]"); } if (args.Key == Keys.Down && args.State == KeyState.KeyDown ) { KeyDown = true; Console.WriteLine(Keys.Right + "[Down]"); } if (args.Key == Keys.Down && args.State == KeyState.KeyUp ) { KeyDown = false; Console.WriteLine(Keys.Right + "[Up]"); } if (args.Key == Keys.Up && args.State == KeyState.KeyDown ) { KeyUp = true; Console.WriteLine(Keys.Right + "[Down]"); } if (args.Key == Keys.Up && args.State == KeyState.KeyUp ) { KeyUp = false; Console.WriteLine(Keys.Right + "[Up]"); } //COMMON WASD KEYS if (args.Key == Keys.W && args.State == KeyState.KeyDown) { KeyW= true; Console.WriteLine(Keys.W + "[Down]"); } if (args.Key == Keys.W && args.State == KeyState.KeyUp) { KeyW = false; Console.WriteLine(Keys.W + "[Up]"); } if (args.Key == Keys.A && args.State == KeyState.KeyDown) { KeyA = true; Console.WriteLine(Keys.A + "[Down]"); } if (args.Key == Keys.A && args.State == KeyState.KeyUp) { KeyA = false; Console.WriteLine(Keys.A + "[Up]"); } if (args.Key == Keys.S && args.State == KeyState.KeyDown) { KeyS = true; Console.WriteLine(Keys.S + "[Down]"); } if (args.Key == Keys.S && args.State == KeyState.KeyUp) { KeyS = false; Console.WriteLine(Keys.S + "[Up]"); } if (args.Key == Keys.D && args.State == KeyState.KeyDown) { KeyD = true; Console.WriteLine(Keys.D + "[Down]"); } if (args.Key == Keys.D && args.State == KeyState.KeyUp) { KeyD = false; Console.WriteLine(Keys.D + "[Up]"); } //COMMON E,Q KEYS if (args.Key == Keys.E && args.State == KeyState.KeyDown) { KeyE = true; Console.WriteLine(Keys.E + "[Down]"); } if (args.Key == Keys.E && args.State == KeyState.KeyUp) { KeyE = false; Console.WriteLine(Keys.E + "[Up]"); } if (args.Key == Keys.Q && args.State == KeyState.KeyDown) { KeyQ = true; Console.WriteLine(Keys.Q + "[Down]"); } if (args.Key == Keys.Q && args.State == KeyState.KeyUp) { KeyQ = false; Console.WriteLine(Keys.Q + "[Up]"); } //ROTATE CAMERA R,T if (args.Key == Keys.R && args.State == KeyState.KeyDown) { KeyR = true; Console.WriteLine(Keys.R + "[Down]"); } if (args.Key == Keys.R && args.State == KeyState.KeyUp) { KeyR = false; Console.WriteLine(Keys.R + "[Up]"); } if (args.Key == Keys.T && args.State == KeyState.KeyDown) { KeyT = true; Console.WriteLine(Keys.T + "[Down]"); } if (args.Key == Keys.T && args.State == KeyState.KeyUp) { KeyT = false; Console.WriteLine(Keys.T + "[Up]"); } //ROTATE CAMERA Y,U if (args.Key == Keys.Y && args.State == KeyState.KeyDown) { KeyY = true; Console.WriteLine(Keys.Y + "[Down]"); } if (args.Key == Keys.Y && args.State == KeyState.KeyUp) { KeyY = false; Console.WriteLine(Keys.Y + "[Up]"); } if (args.Key == Keys.U && args.State == KeyState.KeyDown) { KeyU = true; Console.WriteLine(Keys.U + "[Down]"); } if (args.Key == Keys.U && args.State == KeyState.KeyUp) { KeyU = false; Console.WriteLine(Keys.U + "[Up]"); } } /// <summary> /// Updates the mouse text. /// </summary> /// <param name="rawArgs">The <see cref="SharpDX.RawInput.RawInputEventArgs"/> instance containing the event data.</param> void UpdateMouseText(RawInputEventArgs rawArgs) { var args = (MouseInputEventArgs)rawArgs; //LEFT BUTTON if (args.ButtonFlags == MouseButtonFlags.Button1Down) { MouseLeftButton = true; Console.WriteLine(MouseButtons.Left + "[Down]"); } if (args.ButtonFlags == MouseButtonFlags.Button1Up) { MouseLeftButton = false; Console.WriteLine(MouseButtons.Left + "[Up]"); } //RIGHT BUTTON if (args.ButtonFlags == MouseButtonFlags.Button2Down) { MouseRightButton = true; Console.WriteLine(MouseButtons.Right + "[Down]"); } if (args.ButtonFlags == MouseButtonFlags.Button2Up) { MouseRightButton = false; Console.WriteLine(MouseButtons.Right + "[Up]"); } //MIDDLE BUTTON if (args.ButtonFlags == MouseButtonFlags.Button3Down) { MouseRightButton = true; Console.WriteLine(MouseButtons.Middle + "[Down]"); } if (args.ButtonFlags == MouseButtonFlags.Button3Up) { MouseRightButton = false; Console.WriteLine(MouseButtons.Middle + "[Up]"); } } /// <summary> /// Delegate use for printing events /// </summary> /// <param name="args">The <see cref="SharpDX.RawInput.RawInputEventArgs"/> instance containing the event data.</param> public delegate void UpdateTextCallback(RawInputEventArgs args); } }
I call it like : InputHandler IHandler = new InputHandler(form);
System.InvalidOperationException oluştu HResult=0x80131509 İleti=Pencere işleyicisi oluşturuluncaya kadar denetim üzerinde Invoke veya BeginInvoke çağrılamaz. Kaynak=System.Windows.Forms StackTrace: konum System.Windows.Forms.Control.MarshaledInvoke(Control caller, Delegate method, Object[] args, Boolean synchronous) konum System.Windows.Forms.Control.Invoke(Delegate method, Object[] args) konum CubeApp.InputHandler.<>c__DisplayClass17_0.<.ctor>b__0(Object sender, MouseInputEventArgs args) C:\Users\gomid_000\Documents\Visual Studio 2017\Projects\CubeApp\CubeApp\InputHandler.cs içinde: 50. satır konum SharpDX.RawInput.Device.HandleMessage(IntPtr rawInputMessagePointer, IntPtr hwnd) konum SharpDX.RawInput.Device.RawInputMessageFilter.PreFilterMessage(Message& m) konum System.Windows.Forms.Application.ThreadContext.ProcessFilters(MSG& msg, Boolean& modified) konum System.Windows.Forms.Application.FilterMessage(Message& message) konum SharpDX.Windows.RenderLoop.NextFrame() konum SharpDX.Windows.RenderLoop.Run(Control form, RenderCallback renderCallback, Boolean useApplicationDoEvents) konum CubeApp.Program.<>c__DisplayClass4_0.<Main>b__4() C:\Users\gomid_000\Documents\Visual Studio 2017\Projects\CubeApp\CubeApp\Program.cs içinde: 310. satır konum System.Threading.ThreadHelper.ThreadStart_Context(Object state) konum System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) konum System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) konum System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) konum System.Threading.ThreadHelper.ThreadStart()
I get this error when I close app. what am I doing wrong ?
InputHandler.cs
I call it like : InputHandler IHandler = new InputHandler(form);