2008-10-02 49 views
0

我有另一種形式被髮布在不同的線程表單。大多數情況下,它可以很好地工作,但我會不時得到下面的錯誤。誰能幫忙?通用GDI +錯誤

at System.Drawing.Bitmap..ctor(Int32 width, Int32 height, PixelFormat format) 
at System.Drawing.Bitmap..ctor(Int32 width, Int32 height) 
at System.Drawing.Icon.ToBitmap() 
at System.Windows.Forms.ThreadExceptionDialog..ctor(Exception t) 
at System.Windows.Forms.Application.ThreadContext.OnThreadException(Exception t) 
at System.Windows.Forms.Control.WndProcException(Exception e) 
at System.Windows.Forms.Control.ControlNativeWindow.OnThreadException(Exception e) 
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)  
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg) 
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData) 
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)  
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)  
at System.Windows.Forms.Form.ShowDialog(IWin32Window owner)  
at System.Windows.Forms.Form.ShowDialog() 

回答

1

用戶必須能夠同時看到多個開戶,對不對?所以你需要一個表單的多個實例?

除非我誤解的東西,我不認爲你需要線程這種情況下,我認爲你只是把自己介紹給傷(這樣的例外),結果的世界。

假設你的帳戶形式被稱爲AccountForm,我應該這樣做,而不是:

Dim acctForm As New AccountForm() 
acctForm.Show() 

(當然,你有你自己對於邏輯......)我甚至可以把它放在ShowForm方法,以便我可以只更新我的主叫方:

ShowForm() 

並且完成。現在,所有這些都假設您已經很好地封裝了AccountForm,以便每個實例都有自己的數據,並且它們不會在實例之間共享任何內容。

使用線程,這不僅是矯枉過正,但可能會引入盲蝽象頂部的除外。我在調試多線程WinForms應用程序的經驗表明,這些錯誤往往非常難以複製,並且非常難以找到並修復。通常情況下,最好的解決方法是多線程不,除非你絕對,肯定來。

+0

我傾向於同意你關於多線程的。在這個應用程序的情況下,當我問到爲什麼每個表單在一個單獨的線程中啓動時,原因是因爲表單太大,顯示的數據太大,所以爲了提高性能是必需的。 – joek1975 2008-10-07 16:02:53

0

的應用程序是一個資源管理器類型的客戶管理系統。帳戶表單是從單獨的後臺線程的「主」瀏覽器表單啓動的。我們這樣做是因爲用戶需要能夠同時打開多個帳戶。

我們推出使用該代碼的形式:

Thread = New Thread(AddressOf ShowForm) 
Thread.SetApartmentState(ApartmentState.STA) 
Thread.IsBackground = True 
相關問題