none
VB.NET 2010*多執行緒資料庫讀取 RRS feed

  • 問題

  • 如何使用多執行緒來讀取資料庫呢
    研究半天 用不出來

    卡在

    While (dr.Read)
    編號1 = dr1("ID")
    listbox1.Items.Add(編號1)
    End While

    他會出現跨執行緒錯誤
    該如何解決呢

    0.0
    2010年10月20日 上午 08:54

解答

所有回覆

  • 請愛用 BackgroudWorker。

    http://msdn.microsoft.com/zh-tw/library/ms171728(VS.80).aspx
    http://msdn.microsoft.com/zh-tw/library/3s8xdz5c(VS.80).aspx


    以下為簽名檔,請勿對號入座:
    初學不是問題,但用不正確的態度來問問題,那就是很大的問題。
    請不要藉新手之名行小白之實,否則只會讓更多無辜的新手得不到幫助而已。
    如果不知道什麼是小白,請參閱:何謂小白
    2010年10月20日 上午 09:01
    版主
  • 參考論壇既有關於跨執行續討論

    [http://social.msdn.microsoft.com/Search/zh-TW/?Refinement=112&query=%E8%B7%A8%E5%9F%B7%E8%A1%8C%E7%B7%92%E5%A7%94%E6%B4%BE ]


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2010年10月20日 上午 09:02
    版主
  • 能給個簡單的範例嗎

    拜託 >"<


    0.0
    2010年10月20日 上午 09:25
  • http://social.msdn.microsoft.com/forums/zh-tw/232/thread/F093CD8A-89B6-40CF-9165-EFB856B3C9A0
    這一篇不就有VB.NET的Sample嗎? 而且很多篇都有吧 ?

    先宣告一個委派

       Delegate Sub TabControl1Delegate(ByVal TabControl1 As Object, ByVal Selectindex As Integer) 註解: 參數看你要傳什麼就怎麼設

    寫一個方法處理.

        Private Sub TabControl1Selectindex(ByVal TabControl1 As Object, ByVal Selectindex As Integer)
            If TabControl1.InVokeRequired Then <--表示判斷是否有跨執行委派
                Dim TCL1 As New TabControl1Delegate(AddressOf TabControl1Selectindex) <--產生委派執行個體


                TabControl1.invoke(TCL1, New Object() {TabControl1, Selectindex}) <--Invoke

            Else
                Selectindex = TabControl1.SelectedIndex       <--else以下就是真正在改變畫面的部份
                TextBox1.Text &= Selectindex & ","
            End If

    在執行緒中直接呼叫方法

      Dim Selectedindex As Integer
      TabControl1Selectindex(TabControl1, Selectedindex)

     


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2010年10月20日 上午 09:34
    版主
  • 用 BackgroundWorker1.ReportProgress 能做到listbox1.Items.Add(編號1)

    0.0
    2010年10月20日 上午 09:42
  • 用 BackgroundWorker1.ReportProgress 能做到listbox1.Items.Add(編號1)

    0.0


    當然可以, 使用[BackgroundWorker. . :: . ProgressChanged 事件 ]

    另請參考[逐步解說:實作使用背景作業的表單 ]


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    • 已標示為解答 .NET愛好者 2010年10月20日 下午 07:03
    2010年10月20日 上午 09:51
    版主
  • 用 BackgroundWorker1.ReportProgress 能做到listbox1.Items.Add(編號1)

    0.0


    當然可以, 使用[BackgroundWorker. . :: . ProgressChanged 事件 ]

    另請參考[逐步解說:實作使用背景作業的表單 ]


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    現在可以成功讀取一筆,但是不知道如何讀取完整的,因為select 出的筆數超過一筆....
    0.0
    2010年10月20日 上午 10:03
  • 我再最上方定義 dim sss as string

    然後在我的

    While (dr.Read)
    編號1 = dr1("ID")
    listbox1.Items.Add(編號1)
    End While

    中我加入以下程式碼

    sss=編號1

    BackgroundWorker1.ReportProgress(0, sss)

     

    然後在ProgressChanged中加入

    listbox1.Items.Add(e.UserState)

    就可以加入所讀取到的編號 (1筆以上)

     

    想請問各位先進們,我這樣做對嗎??


    0.0
    • 已標示為解答 .NET愛好者 2010年10月20日 上午 10:54
    • 已取消標示為解答 .NET愛好者 2010年10月20日 上午 10:57
    • 已標示為解答 .NET愛好者 2010年10月20日 下午 04:53
    • 已取消標示為解答 .NET愛好者 2010年10月20日 下午 07:03
    2010年10月20日 上午 10:45
  • 差不多就是這麼一回事, 你的程式應該是可以跑了.

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2010年10月20日 下午 12:08
    版主
  • 差不多就是這麼一回事, 你的程式應該是可以跑了.

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    BILL 謝謝您 ^^
    0.0
    2010年10月20日 下午 04:52
  • 標自己為解答好像滿奇怪的會不會 ? 以後恐怕沒有人會想回答你問題了.
    2010年10月20日 下午 04:59
  • 標自己為解答好像滿奇怪的會不會 ? 以後恐怕沒有人會想回答你問題了.


    給自己一個答案 也給搜尋的人更直接的答案

    所以我把方法打出來了

    這種方法讓遇到相同問題的人不是有更直接的答案嗎?


    0.0
    2010年10月20日 下午 07:03