mboost-dp1
OpenGL, Windows Forms og event queue
- Forside
- ⟨
- Forum
- ⟨
- Programmering
Jeg sidder med en OpenGL applikation der skal rendere et tungere billede (og smide antialiasing på etc.), samtidigt vil jeg gerne tillade user input, dvs. at hvis en bruger trykker på en knap eller klikker med musen skal min applikation reagere på det.
Windows Forms er lavet så smart at det kun er tråden der har lavet formen der kan tilgå den, og da renderingen foregår i tråden der også håndterer events kommer der ikke rigtigt nogle opdateringer.
Hvad der kunne være pisse smart var hvis jeg kunne tilgå keyboard og mus direkte og bare teste for det undervejs i renderingen, så hvis der er kommet ændringer hurtigtst muligt præsentere hvad jeg har og så returnere.
Alternativt kunne man tilgå event queuen hvis man kan finde ud af det (jeg kan ikke). Hvis nogle har en måde at gøre dette på er jeg også meget interesseret.
Application.DoEvents var en mulighed, hvis ikke jeg havde flere forms på samme tid. Så det kan heller ikke rigtigt lade sig gøre ad den vej.
På alle mine forms kører et event loop via Application.Run(form).
Jeg bruger C# 2.0 (kan skifte til 3.5 hvis der er en løsning der), windows forms og Tao.OpenGL.
Håber at nogen kan komme med en løsning på mit problem. Verden har i forvejen rigeligt med uresponsive applikationer, ingen grund til at lave en mere hvis det kan undgåes ;)
Jeg udlodder en Chokoladebar efter eget valg for virkende løsning (dvs. en løsning der er tilgængelig uden at skulle skrive 200 linier). :)
Windows Forms er lavet så smart at det kun er tråden der har lavet formen der kan tilgå den, og da renderingen foregår i tråden der også håndterer events kommer der ikke rigtigt nogle opdateringer.
Hvad der kunne være pisse smart var hvis jeg kunne tilgå keyboard og mus direkte og bare teste for det undervejs i renderingen, så hvis der er kommet ændringer hurtigtst muligt præsentere hvad jeg har og så returnere.
Alternativt kunne man tilgå event queuen hvis man kan finde ud af det (jeg kan ikke). Hvis nogle har en måde at gøre dette på er jeg også meget interesseret.
Application.DoEvents var en mulighed, hvis ikke jeg havde flere forms på samme tid. Så det kan heller ikke rigtigt lade sig gøre ad den vej.
På alle mine forms kører et event loop via Application.Run(form).
Jeg bruger C# 2.0 (kan skifte til 3.5 hvis der er en løsning der), windows forms og Tao.OpenGL.
Håber at nogen kan komme med en løsning på mit problem. Verden har i forvejen rigeligt med uresponsive applikationer, ingen grund til at lave en mere hvis det kan undgåes ;)
Jeg udlodder en Chokoladebar efter eget valg for virkende løsning (dvs. en løsning der er tilgængelig uden at skulle skrive 200 linier). :)
Jeg tror de to følgende links redder mig:
http://blogs.msdn.com/toub/archive/2006/05/03/5894...
http://blogs.msdn.com/toub/archive/2006/05/03/5894...
Mærkeligt at lede efter en løsning i en uge og så finde den 10 min efter man spørger om hjælp :)
Well, nu ser vi.
http://blogs.msdn.com/toub/archive/2006/05/03/5894...
http://blogs.msdn.com/toub/archive/2006/05/03/5894...
Mærkeligt at lede efter en løsning i en uge og så finde den 10 min efter man spørger om hjælp :)
Well, nu ser vi.
Gå til top
Opret dig som bruger i dag
Det er gratis, og du binder dig ikke til noget.
Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.