你有任何想法如何從一個C#DLL的DoEvents在DLL
回答
不叫的DoEvents。當你是控制事件循環的應用程序時,這足夠簡單;從一個DLL中抽取消息只會增加你最終會碰到代碼的風險,一個天真的程序員不能再次進入安全環境。
你的意思是System.Windows.Forms.Application.DoEvents()
?
寫的EXE一個接口,讓你的主窗體或主類實現它。 然後註冊該對象實現與DLL的接口。 將其分配給該接口類型 的變量做一個子程序是整個DLL可見。 在Subroutine中檢查變量是否爲空,如果不是則調用您創建的方法觸發DoEvents的子例程。 任何時候你需要做一個DoEvents,然後調用子程序。
如果您的應用程序使用三層組織,請在表示整個應用程序的對象上放置子例程或變量。將表單註冊到Application對象中。
如果你有重入問題,你可以添加狀態變量和其他幫助函數來安全地檢查應用程序正在做什麼。請注意,如果您使用某種類型的多層設計,則實現此功能要容易得多。
對於其他尋找這個再入侵是一個問題,但是,這是一個非響應的用戶界面。在複雜的應用程序中,有些情況下您必須讓事件循環啓動。
我會迴應「不要」(無論是從DLL或UI項目)。有幾件事情可以使圖書館代碼與UI良好地發揮作用,包括您可能從UI中使用的相同的線程技巧(包括事件和/或回調)。最簡單的方法是庫代碼簡單地執行「原樣」,而如果用戶界面發生產卵它在一個工作線程,那麼它是UI的工作,處理任何事件和他們(Control.Invoke/BeginInvoke
)元帥的UI線程UI更新。
對於更復雜的場景,您可以使用同步上下文(SynchronizationContext.Current
)將消息發佈到UI線程(實際上這是如何工作的,但它是獨立於實現的 - 所以WPF同步上下文可以通過WPF調度員)。
你能在場景就是加入更多內容?有很多事情可以做...
- 1. 的DoEvents在JavaScript
- 2. VB.NET DOEVENTS
- 3. MoveFirst DoEvents MoveLast
- 4. 在VB 6.0中使用DoEvents()
- 5. Javascript DoEvents相當於?
- 6. Silverlight OpenFileDialog等效DoEvents
- 7. 等效於C++的DoEvents?
- 8. VBA的DoEvents()在訪問或替代
- 9. C#等價於VB 6 DoEvents
- 10. 如何在QTP 11中使用DoEvents?
- 11. VBA代碼偶爾卡在doevents中
- 12. 使用IMessageFilter和DoEvents的模態操作
- 13. 正確使用與WPF兼容的DoEvents()
- 14. VB6 DoEvents不按預期工作
- 15. DoEvents是否僅影響當前線程?
- 16. 我正在尋找VB等效的VB doevents
- 17. 進度對話框掛在Outlook中添加使用的DoEvents
- 18. 在Java中,有沒有像VB6中的「DoEvents」
- 19. 在VBA中處理來自Access的「大」Recordset,DoEvents
- 20. 在Visual Studio宏中是否有等效的DoEvents?
- 21. 如何在C++中停止應用程序DoEvents循環?
- 22. 在DoEvents期間VB6程序崩潰,爲什麼?
- 23. MsAccess中的DoEvents語句中的「空使用空值」錯誤
- 24. 在我的DLL
- 25. 爲什麼Refresh()不執行DoEvents()所做的事情?
- 26. DebugBreak在另一個DLL下的DLL
- 27. 在DLL
- 28. 如何在不調用application :: doevents的情況下關閉後臺工作線程?
- 29. jQuery時機 - 想在方法中添加類似於DoEvents()的東西
- 30. COM DLL的C + + dll
我完全同意。 – 2008-11-12 08:19:58
我同意DoEvents不被使用。但是,如果導致問題的DoEvents來自您沒有源代碼的第三方DLL,該怎麼辦?我已經在我的應用程序重繪問題惡夢,我懷疑它,因爲控件調用的DoEvents和我的主要應用循環最終被代理到控制,因此只要不顯示控制,我的整個應用程序不能正常重繪。 – 2009-05-21 01:42:21