[問題] 動態新增的form有時候無法呼叫method

作者: vi000246 (Vi)   2016-10-25 00:03:37
我在winform程式裡有顆按鈕
使用者按鈕後會彈出新視窗
經由http request取得圖片網址後
在新視窗裡載入圖片跟一顆按鈕
按下新視窗裡的按鈕會觸發click事件
也有bind keypress事件
程式碼簡化如下
https://dotnetfiddle.net/Pa7cy6
呼叫"ImagePopup"是經由thread呼叫的
這樣才有辨法多開彈出視窗
有時候按下彈出視窗裡的按鈕
會出現找不到"buttonDownload_Click"這method的錯誤訊息
彈出視窗的click跟keypress都無法找到該事件的method
我試過一次開20個彈出視窗也不會有這錯誤
不知道是不是存檔事件跟http request有時會發生卡死現象
想問這種情況該從哪邊debug呢
作者: Litfal (Litfal)   2016-10-25 02:00:00
有什麼跨執行續用ShowDialog而不是直接單一執行續用Show的理由嗎...?八成是跨執行續玩UI出的問題
作者: vi000246 (Vi)   2016-10-25 10:14:00
單執行緒的話一次只能開一個彈出視窗 而彈出視窗出現前會有段http request造成短暫凍結我是希望多開彈出視窗 讓它在背景執行request後再彈出
作者: Litfal (Litfal)   2016-10-25 11:03:00
單執行續只能開一個視窗?你要不要再看一次推文第一句執行耗時工作的非同步是另一回事,不要和UI混在一起。
作者: Peruheru (還在想)   2016-10-25 11:47:00
ShowDialog一次就一個沒錯,但Show就沒有這限制囉如果你希望它有強迫使用者回應的效果,可以用其他方式但話說回來一次多個要強迫使用者回應,優先度就麻煩了
作者: Litfal (Litfal)   2016-10-25 11:54:00
他用多執行續開ShowDialog也不會有強制回應的效果,用起來跟Show有九成像
作者: vi000246 (Vi)   2016-10-25 16:09:00
原來還有show能用 感謝 我在試試看沒仔細看第一行推文 拍謝改用show視窗會閃一下就關掉 而且彈出前會定格不能動作我這個不需要強制回應 跟主視窗是獨立不相關的
作者: Litfal (Litfal)   2016-10-25 23:31:00
閃一下關掉是因為你還是用using包著吧,耗時工作用多續
作者: vi000246 (Vi)   2016-10-26 00:09:00
謝謝樓上大大 我明天再研究看看
作者: Litfal (Litfal)   2016-10-26 12:25:00
耗時工作要用多執行續阿,舉個例,你下載圖片需要5秒,那你就該把下載派給另一個執行續去做,下載完通知UI執行續叫它顯示。而不是把UI和下載的工作都指派給另一條執行續。
作者: vi000246 (Vi)   2016-10-26 13:06:00
我的架構可能要重寫了 謝謝 我再想想看我用BackbroundWorker的completed事件處理彈出視窗就成功了 感謝各位指導

Links booklink

Contact Us: admin [ a t ] ucptt.com