2015-01-29 4 views
0

백그라운드 작업자와 값을 전달하고 있습니다.VB MyParameters 클래스가 중지 된 것처럼 보임

Class MyParameters 
     Friend _QueryStr As String 
     Friend _Value_CreatedDate As Object 
     Friend _AccountID As Object 
     Friend _Last_Login As Object 
     Friend _Motto As Object 
     Friend _Bio As Object 
     Friend _pFavourite_Game As Object 
     Friend _pFacebookLink As Object 
     Friend _pInstagram As Object 
     Friend _pTwitterLink As Object 
     Friend _pTumblerLink As Object 
     Friend _pYoutubeLink As Object 
     Friend _lblpYoutubeLink As String 
     Friend _lblpTumblerLink As String 
     Friend _lblpTwitterLink As String 
     Friend _lblpInstagram As String 
     Friend _lblFacebookLink As String 
     Friend _lblpFavourite_Game As String 
     Friend _lblBio As String 
     Friend _lblMotto As String 
     Friend _lblLast_Login As String 
     Friend _AccessCode As String 
     Friend _TargetUGPoints As String 
     Friend _Stream As New MemoryStream() 
     Friend _Image As Byte() 
     Friend _DoB_Value As Object 
     Friend _DoB As Date 
     Friend _Years As Integer 
     Friend _Months As Integer 
     Friend _Cautions_Value As Integer 
     Friend _Cautions As Integer 
     Friend _Bitmap As New Bitmap(_Stream) 
     Friend _Con As New SqlConnection("Data Source =" & My.Settings.ServerIP & ";Initial Catalog=Atlas;Integrated Security=False;User=" & My.Settings.UserName & ";Password=leaders132;") 
     Friend _MyCMD As New SqlCommand(_QueryStr, _Con) 
    End Class 

내가 폼로드 이벤트에서이 같은 배경 노동자를 호출하고 있습니다 :

Private Sub cdb_ProfileViewer_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
     Loadinglbl.Visible = True 
     SpinningProgress1.Visible = True 
     MsgBox("Starting MyParamters") 
     Dim m As New MyParameters 
     MsgBox("My Parameters set to m") 
     bw.RunWorkerAsync(m) 
    End Sub 

그러나, 응용 프로그램이 아무튼 나는 변수를 저장하기 위해 다음과 같은 클래스를 사용하고이 작업을 수행하려면 배경 작업자에게 접근하는 것 같아. 얼거나 오류가 없으며 단순히 아무 것도하지 않습니다. 나는 배경 작업자가 일하는 것처럼 폼을 통제하고 있지만, msgbox를 실행하지 않기 때문에 시작하지 않는다고 생각합니다. 예를 들어, 어떤 코드 단계에 도달했는지 알려주기 위해 Msgbox을 코드에 포함 시켰습니다. 내가 Dim m as New Parameter, 앞에 두었지 만 다음에 없으면 작동합니다.

Private Sub bw_RunWorkerCompleted(ByVal sender As Object, ByVal e As RunWorkerCompletedEventArgs) 
     Dim m As MyParameters = DirectCast(e.Result, MyParameters) 'Convert the generic Object back into a MyParameters object 
     MsgBox("Reached Worker Complete") 

     'Called when the BackgroundWorker is completed. 

end sub 

내 BW 공공 클래스 코드 :

또한 코드없이,

Private Sub bw_DoWork(ByVal sender As Object, ByVal e As DoWorkEventArgs) 
     Dim m As MyParameters = DirectCast(e.Argument, MyParameters) 'Convert the generic Object back into a MyParameters object 
     Dim worker As BackgroundWorker = CType(sender, BackgroundWorker) 
     e.Result = m 

'Do some time-consuming work on this thread 

end sub 

내 WorkerCompleted 이벤트 : 그것은 lenthy의로

내 배경 노동자, 내 코드를 생략 한주의

Private bw As BackgroundWorker = New BackgroundWorker 
    Private Delegate Sub ButtonClick(ByVal sender As Object, ByVal e As EventArgs) 

그리고 BW를 담당하는 Public Sub :

Public Sub New() 
     InitializeComponent() 

     bw.WorkerReportsProgress = False 
     bw.WorkerSupportsCancellation = False 
     AddHandler bw.DoWork, AddressOf bw_DoWork 
     AddHandler bw.RunWorkerCompleted, AddressOf bw_RunWorkerCompleted 
    End Sub 

점프할만한 것이 있습니까? 내가 말했듯이, 나는 내 Class MyParamters에 뭔가 있다고 느낍니다.

+0

해당 클래스에는 여러 개의 불법 필드가 있습니다 (그리고 그 중 일부는 전혀 좋지 않습니다). 예를 들어, 비트 맵과 SQLCommand가 throw되고 예외가 발생합니다. FormLoad에서 이런 일이 발생하면 그 사실을 알 수 없습니다. – Plutonix

답변

1

Load() 이벤트는 불행히도 예외를 삼켜 버립니다.

최소 코드가 재현 ... 당신은 빈 스트림에서 비트 맵을 만들 수 없습니다

Friend _Bitmap As New Bitmap(_Stream) 

: 생성자 또는 표시됨() 이벤트에 해당 코드를 이동하고 문제가 분명하게

Public Class MyParameters 
    Friend _Stream As New MemoryStream() 
    Friend _Bitmap As New Bitmap(_Stream) 
End Class 

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    Dim M As New MyParameters 
End Sub 
관련 문제