none
請問大大, 為何 設計多執行緒程式, 在執行緒內使用微軟的新注音小鍵盤 後會當掉? RRS feed

  • 問題

  • 第一個執行緒 範例如下:

    Public Class Form1

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

            System.Threading.Thread.CurrentThread.Name = "th1"
            Me.TextBox1.Text = System.Threading.Thread.CurrentThread.Name
            Dim th As New System.Threading.Thread(AddressOf Form2.thshow)
            th.Name = "th2"
            th.Start()
           
        End Sub
      End Class

    由 第一個執行緒 啟動 Form2 後, 將現在執行緒的名稱顯示在 Form2 的 TextBox 上, 範例如下:

    Public Class Form2

        Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Me.TextBox1.Text = Threading.Thread.CurrentThread.Name
        End Sub

        Public Sub thshow()
            Me.Show()
            System.Windows.Forms.Application.Run()   
        End Sub

    End Class


    此時, 想在 TextBox 上輸入文字, 於是 打開 微軟的新注音小鍵盤(版本為 2003)後, 卻當掉了.

    這個問題也會發生在新倉頡小鍵盤.
    但使用注音, 新注音, 及新倉頡輸入法都不會有問題.
    作業系統為 Windows Server 2003 R2 Enterprise Edition

    開發工具為 Visual Studio 2005 Professional, Visual Basic. 

    請問大大, 問題出在哪裡? 煩請解惑, 感恩!!!

    2010年1月8日 上午 07:58

解答

  • 1. 請不要使用執行緒來裝載使用者介面物件或處理與使用者互動的功能,這樣很容易讓系統當掉。
    2. 有可能是小鍵盤本身未針對 Multithreading 環境設計,以致在切換執行緒時出問題(此為個人猜測),但基本上本來就不建議在非行程的執行緒(主執行緒)中跑任何與使用者互動的動作。
    初學不是問題,但用不正確的態度來問問題,那就是很大的問題。
    請不要藉新手之名行小白之實,否則只會讓更多無辜的新手得不到幫助而已。
    • 已標示為解答 Lolota Lee 2010年1月15日 上午 07:31
    2010年1月8日 上午 10:49
    版主

所有回覆

  • 1. 請不要使用執行緒來裝載使用者介面物件或處理與使用者互動的功能,這樣很容易讓系統當掉。
    2. 有可能是小鍵盤本身未針對 Multithreading 環境設計,以致在切換執行緒時出問題(此為個人猜測),但基本上本來就不建議在非行程的執行緒(主執行緒)中跑任何與使用者互動的動作。
    初學不是問題,但用不正確的態度來問問題,那就是很大的問題。
    請不要藉新手之名行小白之實,否則只會讓更多無辜的新手得不到幫助而已。
    • 已標示為解答 Lolota Lee 2010年1月15日 上午 07:31
    2010年1月8日 上午 10:49
    版主
  • 侯捷 翻譯的 Win32 多緒程式設計
    http://www.google.com.tw/search?hl=zh-TW&q=%E4%BE%AF%E6%8D%B7+Win32+%E5%A4%9A%E7%B7%92%E7%A8%8B%E5%BC%8F%E8%A8%AD%E8%A8%88&meta=&aq=f


    Main Thread 為 GUI Thread ,其他的為 work thread ...

    可以翻看,對於多緒程式設計有極大幫助。
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年1月8日 上午 11:18
  • 謝謝大大回覆,

    將範例程式編譯為執行檔後, 在各 Windows OS 下執行, 結果如下:

    Windows XP Professional: 當掉 (小鍵盤(版本為 2002a))

    Windows Vista Ultimate: 正常 (小鍵盤(版本為 10.0))

    Windows 7 Home Premium: 正常 (小鍵盤(版本為 10.0))

    Windows Server 2003 R2 Enterprise: 當掉 (小鍵盤(版本為 2003))



    所以, 可能是 微軟小鍵盤的 bug, 也許跟 小朱大 猜測的一樣.

    如果是 bug 的話, 不知微軟會不會改?!


    2010年1月11日 上午 10:09
  • 基本上只建議升級,因為 2002a 也過太久了,應該早就過了支援期 ...


    初學不是問題,但用不正確的態度來問問題,那就是很大的問題。
    請不要藉新手之名行小白之實,否則只會讓更多無辜的新手得不到幫助而已。
    2010年1月11日 上午 10:25
    版主
  • 謝謝大大回覆,

    我想: XP 及 Server 2003 用的人還是相當多, 而且我已將 Server 2003 更新至最新了, 小鍵盤版本還是 2003版,

    不知微軟願不願意 修正一下?!

    還是, 要裝新版的 Office 才能更新 輸入法? 或是有獨立的微軟輸入法套件?
    2010年1月11日 上午 11:37
  • 這是論壇,論壇上面的是網友,不是微軟員工。

    你有對微軟的建議,可到:
    http://connect.microsoft.com/
    反應。

    正常來說,微軟不會為了不建議的設計方式修改舊版本的軟體,新版本則視情況是否加入,一般軟體公司的政策也是如此,非只有微軟會這樣。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年1月12日 上午 01:41