单独窗体运行时没有问题的,然后主窗体调用的时候,就有问题,其实就是一个正在缓冲的效果
const int SW_SHOWNOACTIVATE = 4; [DllImport("User32.dll", CharSet = CharSet.Auto)] public static extern int ShowWindow(IntPtr hWnd, short cmdShow);
就用这个掉用的时候就出问题(就是一个picturebox绑定了一个gif的图片),单独运行的时候是没有问题的。
BufferForm bf = new BufferForm(); ShowWindow(bf.Handle, SW_SHOWNOACTIVATE); System.Threading.Thread.Sleep(5000); bf.Close();
看了网上的重写onPaint事件,但是问题还是解决不了
第一次回复:线程的问题吧,将System.Threading.Thread.Sleep(5000); bf.Close();这两句注释掉试试
第二次回复:
Form1 f1 = new Form1(); ShowWindow(f1.Handle, SW_SHOWNOACTIVATE); ManualResetEvent mre = new ManualResetEvent(false); ThreadPool.RegisterWaitForSingleObject(mre, (state, timeout) => { Invoke(new Action(() => { ((Form1) state).Close(); })); }, f1, 5000, true);
还是没有效果,唉,我都不晓得咋写了。单独运行时OK的。。
@_Vegetables: 写个demo发我?
@jello chen: 麻烦留个邮箱,谢谢。Demo已经准备好,麻烦给看下
@_Vegetables: jello_chen@live.com
@jello chen: 已发送,谢谢了
@_Vegetables: 原因是ShowWindow()和Form.WindowState冲突,将Form1.WindowState改为Normal,重新运行。如果需要设置成最大化,有两种方式:
1.Form1.WindowState=System.Windows.Forms.FormWindowState.Maximized;
然后,用f1.Show()代替ShowWindow(f1.Handle,4);
2.先调用ShowWindow(f1.Handle,4),然后设置Form1.WindowState=System.Windows.Forms.FormWindowState.Maximized;
@jello chen: 万分感谢!!!