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