사용자 콘트롤이있는 메인 윈도우 폼이 있습니다. 거기서 나는 데이터베이스와 관련된 몇 가지 작업을 수행합니다. 데이터베이스 프로세스 중 나는 사용자에게 추가 윈도우 폼을 보여주기 때문에 좋은 서커스 그래픽을 볼 수있다. 내가 언급 된 데이터베이스 프로세스를 배치하는 작업을 사용하고 거기에서 오류가 발생하면 try/catch에서 오류 메시지를 표시하려고합니다. Unfortunetly MessageBox.Show가 테스트를 수행 할 때 표시되지 않습니다. catch에 도달하지도 않았습니다. 무엇이 잘못되었는지 좀 도와 주실 수 있습니까? 나는 캐치 한 Statment에서이 라인에 대해 이야기하고있다 :오류 발생시 캐치가 발생하지 않음
Dim createArticle As New Artikel
Dim pic As New FrmCircularProgress(eCircularProgressType.Donut)
Dim tsk As Task(Of Boolean) = Task.Factory.StartNew(Of Boolean)(Function()
'--Run lenghty task
Dim resu = False
Try
resu = createArticle.ProcessArticle(_artikelsAndTheirVariationsFinal)
'--Close form once done (on GUI thread)
Catch sqlex As Exception
pic.Invoke(Sub() MessageBox.Show(pic, sqlex.Message))
Finally
pic.Invoke(New Action(Sub() pic.StopCircular()))
pic.Invoke(New Action(Sub() pic.Close()))
End Try
Return resu
End Function)
'--Show the form
pic.ShowDialog()
Task.WaitAll(tsk)
...
그리고 단지에 대한이 : 내가 작업과 함께 사용하는 방법
Public Class FrmCircularProgress
Sub New(progressType As DevComponents.DotNetBar.eCircularProgressType)
InitializeComponent()
CircularProgress1.ProgressBarType = progressType
StartCircular()
End Sub
Public Sub StartCircular()
Me.CircularProgress1.IsRunning = True
End Sub
Public Sub StopCircular()
Me.CircularProgress1.IsRunning = False
End Sub
End Class
이 예는 다음과 같습니다
Catch sqlex As Exception
pic.Invoke(Sub() MessageBox.Show(pic, sqlex.Message))
여기 circural 윈도우의 형태 코드입니다 우리는 예제 데이터베이스 프로세스를 볼 수 있습니다. 사실 또는 거짓을 반환하는 ProcessArticle
Public Function ProcessArticle(artikel As ArticlesVariations) As Boolean
Dim result = True
Dim strcon = New AppSettingsReader().GetValue("ConnectionString", GetType(System.String)).ToString()
Using connection As New SqlConnection(strcon)
'-- Open generall connection for all the queries
connection.Open()
'-- Make the transaction.
Dim transaction As SqlTransaction
transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted)
Dim newArticleRowId As Integer = 0
Dim articleIndex As Integer = 0
Try
For Each kvp As KeyValuePair(Of Integer, Artikel) In artikel.collection
Dim ckey As Integer = kvp.Key
articleIndex = kvp.Key 'save article key
Dim data As Artikel = kvp.Value
'-- If given article contains images list (artikel_images is a list with pictures associated with article)
If Not IsNothing(artikel.collection(articleIndex).ArtikelImages) Then
For Each img In artikel.collection(articleIndex).ArtikelImages
'--Insert article's images if exists
Using cmd As New SqlCommand("INSERT INTO T_Article_Image (Path, FK_Artikel_ID, Position) VALUES (@Path, @FK_Artikel_ID, @Position)", connection)
cmd.CommandType = CommandType.Text
cmd.Connection = connection
cmd.Transaction = transaction
cmd.Parameters.AddWithValue("@Path", img.Path)
cmd.Parameters.AddWithValue("@FK_Artikel_ID", newArticleRowId)
cmd.Parameters.AddWithValue("@Position", img.Position)
cmd.ExecuteScalar()
End Using
Next
End If
'-- If given article contains articles variations list (artikel_variation_attributes is a list with variations associated with article)
If Not IsNothing(artikel.collection(articleIndex)._artikel_variation_attributes) Then
For Each var In artikel.collection(articleIndex)._artikel_variation_attributes
'--Insert article's images if exists
Using cmd As New SqlCommand("INSERT INTO T_Artikel_T_Variation (FK_Variation_VariationAttribute_ID, FK_Artikel_ID, Position) VALUES (@FK_Variation_VariationAttribute_ID, @FK_Artikel_ID, @Position)", connection)
cmd.CommandType = CommandType.Text
cmd.Connection = connection
cmd.Transaction = transaction
cmd.Parameters.AddWithValue("@FK_Variation_VariationAttribute_ID", New Variation_VariationAttribute(var.FkVariationId, var.FkVariationAttributeId).GetId())
cmd.Parameters.AddWithValue("@FK_Artikel_ID", newArticleRowId)
cmd.Parameters.AddWithValue("@Position", var.Position)
cmd.ExecuteScalar()
End Using
Next
End If
Next
transaction.Commit()
Catch ex As Exception
result = False
'-- Roll the transaction back.
Try
transaction.Rollback()
Catch ex2 As Exception
result = False
End Try
End Try
End Using
Return result
End Function
간결하고 재현 가능한 예제를 만들 수 있습니까? 데이터베이스에 대한 참조를 제거하고, 항상 예외를 던져 버리고 그것을 잡으려고하십시오. 항상 조언을 구하기 전에 문제를 줄이기 위해 노력하십시오. – Neolisk
@ Neolisk 나는 이미 많은 부분을 잘라 냈다. 내 관점에서 보면 꽤 명확하다. –
아내 한테 물어보기가 사람마다 어떻게 다른지 물어보십시오! –