作者vi000246 (Vi)
看板C_Sharp
標題[問題] 動態新增的form有時候無法呼叫method
時間Tue Oct 25 00:03:37 2016
我在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://webptt.com/m.aspx?n=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
1F:推 Litfal: 有什麼跨執行續用ShowDialog而不是直接單一執行續用Show的 10/25 02:00
2F:→ Litfal: 理由嗎...? 10/25 02:00
3F:→ Litfal: 八成是跨執行續玩UI出的問題 10/25 02:02
4F:→ vi000246: 單執行緒的話一次只能開一個彈出視窗 而彈出視窗出現前 10/25 10:14
5F:→ vi000246: 會有段http request造成短暫凍結 10/25 10:15
6F:→ vi000246: 我是希望多開彈出視窗 讓它在背景執行request後再彈出 10/25 10:16
7F:→ Litfal: 單執行續只能開一個視窗?你要不要再看一次推文第一句 10/25 11:03
8F:→ Litfal: 執行耗時工作的非同步是另一回事,不要和UI混在一起。 10/25 11:04
9F:推 Peruheru: ShowDialog一次就一個沒錯,但Show就沒有這限制囉 10/25 11:47
10F:→ Peruheru: 如果你希望它有強迫使用者回應的效果,可以用其他方式 10/25 11:48
11F:→ Peruheru: 但話說回來一次多個要強迫使用者回應,優先度就麻煩了 10/25 11:49
12F:→ Litfal: 他用多執行續開ShowDialog也不會有強制回應的效果,用起 10/25 11:54
13F:→ Litfal: 來跟Show有九成像 10/25 11:54
14F:→ vi000246: 原來還有show能用 感謝 我在試試看 10/25 16:09
15F:→ vi000246: 沒仔細看第一行推文 拍謝 10/25 16:10
16F:→ vi000246: 改用show視窗會閃一下就關掉 而且彈出前會定格不能動作 10/25 20:23
17F:→ vi000246: 我這個不需要強制回應 跟主視窗是獨立不相關的 10/25 20:24
18F:→ Litfal: 閃一下關掉是因為你還是用using包著吧,耗時工作用多續 10/25 23:31
19F:→ vi000246: 謝謝樓上大大 我明天再研究看看 10/26 00:09
21F:→ vi000246: 用show的話UI會在 new GetPreViewImage().CallImageHand 10/26 11:07
22F:→ vi000246: erdle(url);這裡block住 10/26 11:07
23F:→ vi000246: 是不是只能用thread才能讓這視窗背景執行不會block UI呢 10/26 11:08
24F:→ Litfal: 耗時工作要用多執行續阿,舉個例,你下載圖片需要5秒,那 10/26 12:25
25F:→ Litfal: 你就該把下載派給另一個執行續去做,下載完通知UI執行續叫 10/26 12:25
26F:→ Litfal: 它顯示。而不是把UI和下載的工作都指派給另一條執行續。 10/26 12:26
27F:→ vi000246: 我的架構可能要重寫了 謝謝 我再想想看 10/26 13:06
28F:→ vi000246: 我用BackbroundWorker的completed事件處理彈出視窗就成 10/26 17:17
29F:→ vi000246: 功了 感謝各位指導 10/26 17:17