線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2096
推到 Plurk!
推到 Facebook!

Thread裡是否不能使用ShowMessage?

尚未結案
dodolong
一般會員


發表:5
回覆:6
積分:2
註冊:2003-12-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-03-11 23:12:35 IP:61.216.xxx.xxx 未訂閱
請問各位先進,小弟的程式裡有使用到Thread, 而我的Thread裡想利用ShowMessage來popup一些訊息 但當我這樣使用時會出現"Canvas does not allow drawing"的錯誤, 請問這是什麼問題呢? 假如不能這樣使用,該用什麼替代方式呢? 煩請各位先進指導,謝謝
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-03-11 23:25:47 IP:61.221.xxx.xxx 未訂閱
引言: 請問各位先進,小弟的程式裡有使用到Thread, 而我的Thread裡想利用ShowMessage來popup一些訊息 但當我這樣使用時會出現"Canvas does not allow drawing"的錯誤, 請問這是什麼問題呢? 假如不能這樣使用,該用什麼替代方式呢? 煩請各位先進指導,謝謝
dodolong 你好:
(1)不建議這樣子做,那是不安全的,因為 VCL 並不是 Thread Safe 的,而
   ShowMessage 也是 VCL 的一部分
(2)你如果一定要在 Thread 裡面秀出一些資訊的話,建議使用 Win32 API
   MessageBox
   http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/dialogboxes/dialogboxreference/dialogboxfunctions/messagebox.asp
-- Enjoy Researching & Developing -- 發表人 - RaynorPao 於 2004/03/11 23:33:41
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
dodolong
一般會員


發表:5
回覆:6
積分:2
註冊:2003-12-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-03-12 16:41:55 IP:140.129.xxx.xxx 未訂閱
引言:
dodolong 你好:
(1)不建議這樣子做,那是不安全的,因為 VCL 並不是 Thread Safe 的,而
   ShowMessage 也是 VCL 的一部分
(2)你如果一定要在 Thread 裡面秀出一些資訊的話,建議使用 Win32 API
   MessageBox
   http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/dialogboxes/dialogboxreference/dialogboxfunctions/messagebox.asp
-- Enjoy Researching & Developing -- 發表人 - RaynorPao 於 2004/03/11 23:33:41
非常感謝RaynorPao的解答,您說的MessageBox方法已經成功的解決了我的問題, 不過我還有一個同時發生的問題,就是我的原意是Thread裡發生某些狀況時Popup一些message 這個部分您已經幫我解決了,但我還希望能做到當message show完之後要exit程式, 但exit()在這裡卻又發生了System error,原因是不是Thread不能去關掉呼叫他的父程式呢? 我曾經想過使用return來中斷,但是當這樣的情況是發生在Thread裡的fuction時,return只是跳出fuction, Thread並沒有同時被關掉(與我原本結束整個程式的想法不一樣), 不知道有什麼方法可以做到呢?煩請RaynorPao先生或各位先進能再給我一些指導,謝謝
jimmy_and_you
初階會員


發表:20
回覆:74
積分:33
註冊:2003-05-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-03-15 13:55:34 IP:61.70.xxx.xxx 未訂閱
不好意思dodolong兄,我之前也遇過同樣的問題所以借用你的版面在請教一下問題: 我之前使用ShowModal();這個函式也會出現相同的問題,而我要的Message視窗又不是標準的,不知道有何方法可以實現阿.
lu
高階會員


發表:11
回覆:189
積分:195
註冊:2003-11-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-03-15 14:36:46 IP:210.68.xxx.xxx 未訂閱
引言: 不好意思dodolong兄,我之前也遇過同樣的問題所以借用你的版面在請教一下問題: 我之前使用ShowModal();這個函式也會出現相同的問題,而我要的Message視窗又不是標準的,不知道有何方法可以實現阿.
呵呵~~你不能讚THREAD中『直接』呼叫ShowModal() 喔 各位參考一下,下面的文章 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=41748 如果一定要這樣做的話,請使用 TThread 的 Synchronize() 如有問題,大家再討論嘿 ^^
anpino
版主


發表:31
回覆:477
積分:231
註冊:2003-01-02

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-03-15 17:16:08 IP:61.66.xxx.xxx 未訂閱
引言: 非常感謝RaynorPao的解答,您說的MessageBox方法已經成功的解決了我的問題, 不過我還有一個同時發生的問題,就是我的原意是Thread裡發生某些狀況時Popup一些message 這個部分您已經幫我解決了,但我還希望能做到當message show完之後要exit程式, 但exit()在這裡卻又發生了System error,原因是不是Thread不能去關掉呼叫他的父程式呢? 我曾經想過使用return來中斷,但是當這樣的情況是發生在Thread裡的fuction時,return只是跳出fuction, Thread並沒有同時被關掉(與我原本結束整個程式的想法不一樣), 不知道有什麼方法可以做到呢?煩請RaynorPao先生或各位先進能再給我一些指導,謝謝
1.沒錯, Thread不能去關掉呼叫他的父程式。 2.用CloseHandle(詳見MSDN)關掉thread。 ------------------------------- 數學系是內功很強(邏輯/分析) 資工系是招式很多(程式技巧) 就像令狐沖VS東方不敗:D Programmers Guide http://anpino.begin.8d8d.com
dodolong
一般會員


發表:5
回覆:6
積分:2
註冊:2003-12-31

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-03-17 23:06:49 IP:61.216.xxx.xxx 未訂閱
引言: 1.沒錯, Thread不能去關掉呼叫他的父程式。 2.用CloseHandle(詳見MSDN)關掉thread。 ------------------------------- 數學系是內功很強(邏輯/分析) 資工系是招式很多(程式技巧) 就像令狐沖VS東方不敗:D Programmers Guide http://anpino.begin.8d8d.com
感謝anpino兄的回答,我會再試試您所提的CloseHandle... 不過由於我原本提的問題是RaynorPao兄所代為解決的... 所以小弟會將答題分數給RaynorPao兄,不過感謝您的幫助...謝謝
系統時間:2024-11-05 5:23:40
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!