Bad idea. It's much better and simpler to use DirectInput for .NET directly. Please start here:
https://msdn.microsoft.com/en-us/library/windows/desktop/bb153251%28v=vs.85%29.aspx[
^],
https://msdn.microsoft.com/en-us/library/windows/desktop/ms805653.aspx[
^].
Your first step will be adding a reference to DirectInput API to your code. Don't use COM references. You will need to use the library from GAC, for example, through the tab ".NET" of the Visual Studio "Add Reference" window; the item you will need to add is "Microsoft.DirectX.DirectInput".
Explore the library and MSDN, and you will find all you need. I used to develop the interface joystick in no time. Main idea you need to understand is using the hardware interrupt. Briefly speaking, you create a separate thread used to wait for input and the event wait handle to wait for. Such wait state does not consume any CPU time. You need register your event handle with the API; then your thread will be waken up by signalling on your event wait handle caused be a joystick hardware interrupt, which only happens when the user moves joystick, any of its levers or presses any of its buttons. You will be able to find it all in API easily.
—SA