2011-06-07 53 views
1

有時我的消息框顯示爲,在下是應用程序的主窗口。因此,消息框不可見,主窗口看起來像是被掛起,並且不會響應任何輸入。通過使用alt-tab切換到另一個應用程序並返回,可以「解凍」主窗口,並最終在主窗口上方的正確位置顯示消息框。但這對用戶來說並不明顯。主窗口下的消息框

任何想法,如何避免這個問題?

UPD主窗口是本地的;我已經嘗試使用MessageBox,但沒有指定父窗口,但在兩種情況下都有相同的問題

+0

你可以請張貼一些代碼嗎? – 2011-06-07 17:05:26

回答

0

我不知道是什麼原因,但我使用自己的包裝用於固定這個問題的原生父窗口:

public class Win32Window : IWin32Window 
{ 
    public Win32Window(IntPtr val) 
    { 
     _handle = val; 
    } 

    readonly IntPtr _handle; 

    public IntPtr Handle 
    { 
     get { return _handle; } 
    } 
} 
2

通常,當您調用消息框函數時,它們會將「父」窗口作爲參數。您作爲「父」窗口傳遞了哪個窗口?

+0

在主機應用程序中請求句柄並使用Control.FromHandle()來包裝 – user626528 2011-06-07 15:31:11

+2

@user:那麼機會就是,主機應用程序傳遞NULL('IntPtr.Zero'),導致消息框與桌面窗口一起顯示爲其父母。這將把它放在你的應用程序的窗口下面。顯示其他代碼以獲得更好的幫助。 – 2011-06-07 15:35:49

+0

@Cody Gray,它不是零。如果桌面窗口是父窗口,它不會凍結我的應用程序的主窗口。 – user626528 2011-06-07 16:05:19

0

可能是你叫的消息框在第二個線程不是主線程