2011-02-11 5 views
0

내 멀티 스레드 프로그램이 작동하지 않습니다. 드롭 다운 목록이 비어 있거나 하나만로드됩니다.멀티 스레딩 vb.net 및 asp.net에 대한 도움이 필요합니다.

Imports System.Threading 
Partial Class _Default 
    Inherits System.Web.UI.Page 

    Public Delegate Sub WaitCallback(ByVal state As Object) 


    Private Sub LongTimeTask(ByVal s As Object) 

     Dim i As Integer 
     Dim str As String 
     str = s.ToString 

     For i = 0 To 1000 
      str = str + "--" + str 
     Next 

    End Sub 

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

     If ThreadPool.QueueUserWorkItem(_ 
      New WaitCallback(AddressOf LongTimeTask), TextBox1.Text) _ 
     Then 
      Label2.Text = "Queued successfully" 
     Else 
      Label2.Text = "Failed" 
     End If 
    End Sub 
+0

어떻게하면 효과가 있다고 생각합니까? 왜 너는 신경 쓰겠 니? –

+0

multithreading asp.net에서 작동하지 않습니다,이 실제로 그것을 그냥 연습하고 싶지 사용하고 싶지 않습니다. – MyHeadHurts

+0

asp.net/vb.net에서 멀티 스레드 할 수 없습니까? – MyHeadHurts

답변

2

나는 이러한 것들을 스레딩하는 것에 대해 걱정하지 않을 것입니다. Page 수명주기는 스레드가 돌아 오기를 기다리지 않습니다.

http://www.beansoftware.com/ASP.NET-Tutorials/Multithreading-Thread-Pool.aspx

+0

2 SQL 저장 프로 시저 같은 다른 것들을 스레드하고 싶거나 내 updatepanels를 동시에 업데이트하고 싶습니다. – MyHeadHurts

+0

+1 - 그 기사는 찾고 있었지만 찾고 있었기 때문에 찾지 못했습니다. Asp.Net에만 정제. –

+0

새 WaitCallback (AddressOf LongTimeTask), TextBox1.Text) _ – MyHeadHurts

1

첫째, 스레드가 서로에게 "소속"고 개체에 액세스 할 수 없습니다. 웹 페이지 수명주기가 스레드 A에서 처리 중이므로 처리중인 개체가 th1 및 th2에 액세스 할 수 없습니다. 여기에는 cmb1 및 cmb2가 포함됩니다.

두 번째로, Asp.Net 라이프 사이클에서 하위 스레드는 상위 스레드가 살아있을 때만 살아 있습니다. 코드에서 th1.Start()th2.Start()을 "불과 잊음"으로 호출합니다. 코드가 바로 보일 때 페이지 수명주기는 스레드가 프로세스를 완료하고 페이지 수명주기의 렌더링 이벤트로 돌아 가기 전에 완료됩니다. 페이지 스레드가 종료되고 응답이 클라이언트에 푸시되면 하위 스레드는 고아가되고 완료되지 않은 채 종료됩니다.

관련 문제