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

看板C_Sharp作者 (Vi)時間7年前 (2016/10/25 00:03), 7年前編輯推噓2(2027)
留言29則, 3人參與, 最新討論串1/1
我在winform程式裡有顆按鈕 使用者按鈕後會彈出新視窗 經由http request取得圖片網址後 在新視窗裡載入圖片跟一顆按鈕 按下新視窗裡的按鈕會觸發click事件 也有bind keypress事件 程式碼簡化如下 https://dotnetfiddle.net/Pa7cy6 呼叫"ImagePopup"是經由thread呼叫的 這樣才有辨法多開彈出視窗 有時候按下彈出視窗裡的按鈕 會出現找不到"buttonDownload_Click"這method的錯誤訊息 彈出視窗的click跟keypress都無法找到該事件的method 我試過一次開20個彈出視窗也不會有這錯誤 不知道是不是存檔事件跟http request有時會發生卡死現象 想問這種情況該從哪邊debug呢 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.12.147.150 ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1477325021.A.CFC.html ※ 編輯: vi000246 (101.12.147.150), 10/25/2016 00:06:33 ※ 編輯: vi000246 (101.12.147.150), 10/25/2016 00:09:35

10/25 02:00, , 1F
有什麼跨執行續用ShowDialog而不是直接單一執行續用Show的
10/25 02:00, 1F

10/25 02:00, , 2F
理由嗎...?
10/25 02:00, 2F

10/25 02:02, , 3F
八成是跨執行續玩UI出的問題
10/25 02:02, 3F

10/25 10:14, , 4F
單執行緒的話一次只能開一個彈出視窗 而彈出視窗出現前
10/25 10:14, 4F

10/25 10:15, , 5F
會有段http request造成短暫凍結
10/25 10:15, 5F

10/25 10:16, , 6F
我是希望多開彈出視窗 讓它在背景執行request後再彈出
10/25 10:16, 6F

10/25 11:03, , 7F
單執行續只能開一個視窗?你要不要再看一次推文第一句
10/25 11:03, 7F

10/25 11:04, , 8F
執行耗時工作的非同步是另一回事,不要和UI混在一起。
10/25 11:04, 8F

10/25 11:47, , 9F
ShowDialog一次就一個沒錯,但Show就沒有這限制囉
10/25 11:47, 9F

10/25 11:48, , 10F
如果你希望它有強迫使用者回應的效果,可以用其他方式
10/25 11:48, 10F

10/25 11:49, , 11F
但話說回來一次多個要強迫使用者回應,優先度就麻煩了
10/25 11:49, 11F

10/25 11:54, , 12F
他用多執行續開ShowDialog也不會有強制回應的效果,用起
10/25 11:54, 12F

10/25 11:54, , 13F
來跟Show有九成像
10/25 11:54, 13F

10/25 16:09, , 14F
原來還有show能用 感謝 我在試試看
10/25 16:09, 14F

10/25 16:10, , 15F
沒仔細看第一行推文 拍謝
10/25 16:10, 15F

10/25 20:23, , 16F
改用show視窗會閃一下就關掉 而且彈出前會定格不能動作
10/25 20:23, 16F

10/25 20:24, , 17F
我這個不需要強制回應 跟主視窗是獨立不相關的
10/25 20:24, 17F

10/25 23:31, , 18F
閃一下關掉是因為你還是用using包著吧,耗時工作用多續
10/25 23:31, 18F

10/26 00:09, , 19F
謝謝樓上大大 我明天再研究看看
10/26 00:09, 19F

10/26 11:03, , 20F
這是我github 在200行的地方 https://goo.gl/gkjOcR
10/26 11:03, 20F

10/26 11:07, , 21F
用show的話UI會在 new GetPreViewImage().CallImageHand
10/26 11:07, 21F

10/26 11:07, , 22F
erdle(url);這裡block住
10/26 11:07, 22F

10/26 11:08, , 23F
是不是只能用thread才能讓這視窗背景執行不會block UI呢
10/26 11:08, 23F

10/26 12:25, , 24F
耗時工作要用多執行續阿,舉個例,你下載圖片需要5秒,那
10/26 12:25, 24F

10/26 12:25, , 25F
你就該把下載派給另一個執行續去做,下載完通知UI執行續叫
10/26 12:25, 25F

10/26 12:26, , 26F
它顯示。而不是把UI和下載的工作都指派給另一條執行續。
10/26 12:26, 26F

10/26 13:06, , 27F
我的架構可能要重寫了 謝謝 我再想想看
10/26 13:06, 27F

10/26 17:17, , 28F
我用BackbroundWorker的completed事件處理彈出視窗就成
10/26 17:17, 28F

10/26 17:17, , 29F
功了 感謝各位指導
10/26 17:17, 29F
文章代碼(AID): #1O3Z3Tpy (C_Sharp)