跳到主要內容

 none
PictureBox 搭配 Tabcontrol 同步刷新顯示問題 RRS feed

  • 問題

  • 各位大大最近碰到一問題,當我在Windows Form  放4個  PictureBox  利用 Timer  來觸發四個畫面不斷刷新,是正常的

    pBoxSrc.Refresh();
    pBoxSrc2.Refresh();
    pBoxSrc3.Refresh();
    pBoxSrc4.Refresh();

    但當我將四個PictureBox 放入Tabcontrol 分頁時,發現沒切換分頁時四個畫面無法繼續動作,這樣就失去分頁同步繼續執行的意義。

    我四個畫面主要是在量測一些物件,分頁是各量測物件畫面放各別顯示功能,切換分頁時須繼續保持四個畫面檢測判斷OK, NG不中斷,如果切換分頁其他畫面不會繼續判斷就收工了.....。

    Tabcontrol是否可以達到我的需求? 全部分頁畫面同時運作,而不是切換當前分頁才開始運作畫面更新量測物件,希望各位大大指點一下小弟,非常感謝

    我朋友是給我一個想法但我還不知道該如何實現, 他建議將 PictureBox 的Paint 的事件拉出來獨立Time由觸發,但我還不知道如何實現這功能? 以及是否可行......?


    • 已編輯 z4503 2019年10月2日 上午 01:46 增加說明
    2019年10月2日 上午 01:33

解答

  • 你四個量測物件是多緒在跑嗎?

    GDI Thread 跟 Work Thread 要分開跑。

    通常量測跑 Work Thread ,畫面更新跑 GDI Thread ,GDI Thread 通常只能是你的 Main Thread

    另外,在非可見的 PictuteBox 不要使用 Paint

    你可以建立 Bitmap 繪圖後,指給 PictureBox (記憶體繪圖)


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    • 已標示為解答 z4503 2019年10月4日 上午 03:59
    2019年10月2日 下午 04:48

所有回覆

  • 你四個量測物件是多緒在跑嗎?

    GDI Thread 跟 Work Thread 要分開跑。

    通常量測跑 Work Thread ,畫面更新跑 GDI Thread ,GDI Thread 通常只能是你的 Main Thread

    另外,在非可見的 PictuteBox 不要使用 Paint

    你可以建立 Bitmap 繪圖後,指給 PictureBox (記憶體繪圖)


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    • 已標示為解答 z4503 2019年10月4日 上午 03:59
    2019年10月2日 下午 04:48
  • 你四個量測物件是多緒在跑嗎? 

    是,四個執行緒分別跑相機連續取向用

    GDI Thread 跟 Work Thread 要分開跑。

    通常量測跑 Work Thread ,畫面更新跑 GDI Thread ,GDI Thread 通常只能是你的 Main Thread

    目前量測也是另外四個執行緒在各別跑,刷新畫面交給Timer 再重複刷新

    另外,在非可見的 PictuteBox 不要使用 Paint

    你可以建立 Bitmap 繪圖後,指給 PictureBox (記憶體繪圖)

    目前大大給的方向是不要用paint 來做成像,會導致Tabcontrol 無法同步刷新所有畫面.


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?





    • 已編輯 z4503 2019年10月3日 上午 01:32 修改
    2019年10月3日 上午 01:23
  • 感謝心冷大大給的方向一次命中。

    附上修改好的方法, 再用Timer 呼叫刷新就可以同步在 tabcontrol 更新所有畫面  

                    Bitmap bmp = new Bitmap(m_Source_Copy.Width, m_Source_Copy.Height);  //設定長寬
                    Graphics g = Graphics.FromImage(bmp);  將BMP 指定給 Graphic       
                    m_Source_Copy.Draw(g, fScale, fScale);  //繪圖        
                    pictureBox1.Image = bmp;  //將BMP 指定給PictureBox  完成
    
                  

    2019年10月4日 上午 04:04
  • 相關討論請在論壇搜尋記憶體繪圖:

    https://social.msdn.microsoft.com/Forums/zh-TW/home?category=&forum=&filter=&sort=relevancedesc&brandIgnore=true&searchTerm=%E8%A8%98%E6%86%B6%E9%AB%94%E7%B9%AA%E5%9C%96

    Paint 事件是針對作用中的畫面,並不是實際畫在圖上,所以在非作用中的畫面等於沒畫。

    你還可以看看這篇

    https://tlcheng.wordpress.com/2009/09/30/net-winform-%E4%B8%AD-picturebox-%E7%9A%84%E5%9C%96%E5%B1%A4/


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2019年10月4日 下午 03:07