我試圖使用SDL2-CS綁定庫從SDL2捕獲鼠標和鍵盤事件。事件被調查,但這些事件從未被提出。在WPF應用程序中從SDL2獲取鍵盤接收的鼠標事件
我認爲這是因爲輪詢需要在UI線程上發生。我試圖通過調用App.Current.Dispatcher.Invoke(Init)
從UI線程初始化SDL,但沒有事件被輪詢。
基本實現,我的課:
public override void Initialize()
{
if (hooked)
{
return;
}
App.Current.Dispatcher.Invoke(Init); //Run on the UI thread
}
private void Init()
{
var init = SDL.SDL_Init(SDL.SDL_INIT_VIDEO);
if (init != 0)
{
throw new Exception("Could not initialize SDL");
}
hooked = true;
ListenForEvents();
}
private void ListenForEvents()
{
SDL.SDL_Event ev;
while (true)
{
if (SDL.SDL_PollEvent(out ev) != 1) //This is continuously trigged
{
continue;
}
switch (ev.type) //This is never reached
{
case SDL.SDL_EventType.SDL_MOUSEMOTION:
if (MouseMoved != null) { MouseMoved(this, ev.motion); }
break;
...
}
}
}
我wondring如果我在UI線程錯誤調用Init
,或者如果SDL初始化是錯誤的。
P.S.掛鉤user32.dll是不希望的,因爲此代碼也會在非Windows環境中運行。
看起來這不能沒有窗口。我需要所有的事件,甚至是窗外的事件。我試着將SdL_VIDEODRIVER設置爲dummy,這隱藏了窗口。但是沒有收到更多的活動。 – Waaghals