С Днем всех, я должен был бы решить проблему не выполнения двух событий объекта. Я реконструировал следующий класс:
Imports System.Data.SqlClient
Imports System.Data.OleDb
Public Class FunDeletedLocalData
Public Event ProgressDeleted(ByVal value As Integer)
Public Event MaxProgressDeleted(value As Integer)
Shared DataStartAppList As List(Of DataStartAppCS)
Shared DataEndAppList As List(Of DataEndAppCS)
Public Sub DeleteAllDataApp()
Dim i As Integer = 0
'**** Preparo lista Record StartApp
'DataStartAppList = New List(Of DataStartAppCS)
ReadDataStartAppFromDBLocaleForDelete()
RaiseEvent MaxProgressDeleted(DataStartAppList.Count)
For Each item As DataStartAppCS In DataStartAppList
Try
DataStartAppDB.DeleteDataStart(item.IdStartApp)
Catch ex As Exception
MessageBox.Show("error transfer data to Server: " & ex.ToString, "Errore",
MessageBoxButtons.OK, MessageBoxIcon.Error)
Exit Sub
End Try
i += 1
RaiseEvent ProgressDeleted(i)
Next
'**** Preparo lista Record EndApp
DataEndAppList = New List(Of DataEndAppCS)
ReadDataEndAppFromDBLocaleForDelete()
RaiseEvent MaxProgressDeleted(i + DataEndAppList.Count)
For Each item As DataEndAppCS In DataEndAppList
Try
DataEndAppDB.DeleteDataEnd(item.IdEndApp)
Catch ex As Exception
MessageBox.Show("error transfer data to Server: " & ex.ToString, "Errore",
MessageBoxButtons.OK, MessageBoxIcon.Error)
Exit Sub
End Try
i += 1
RaiseEvent ProgressDeleted(i)
Next
End Sub
Public Sub DeleteOnlyDataStartApp()
DataStartAppList = New List(Of DataStartAppCS)
ReadDataStartAppFromDBLocaleForDelete()
RaiseEvent MaxProgressDeleted(DataStartAppList.Count)
Dim i As Integer = 0
For Each item As DataStartAppCS In DataStartAppList
Try
DataStartAppDB.DeleteDataStart(item.IdStartApp)
Catch ex As Exception
MessageBox.Show("error transfer data to Server: " & ex.ToString, "Errore",
MessageBoxButtons.OK, MessageBoxIcon.Error)
Exit Sub
End Try
i += 1
RaiseEvent ProgressDeleted(i)
Next
End Sub
Sub DeleteOnlyDataEndApp()
DataEndAppList = New List(Of DataEndAppCS)
ReadDataEndAppFromDBLocaleForDelete()
RaiseEvent MaxProgressDeleted(DataEndAppList.Count)
Dim i As Integer = 0
For Each item As DataEndAppCS In DataEndAppList
Try
DataEndAppDB.DeleteDataEnd(item.IdEndApp)
Catch ex As Exception
MessageBox.Show("error transfer data to Server: " & ex.ToString, "Errore",
MessageBoxButtons.OK, MessageBoxIcon.Error)
Exit Sub
End Try
i += 1
RaiseEvent ProgressDeleted(i)
Next
End Sub
#Region "ReadDataFromDBLocaleForDelete"
Public Shared Function ReadDataStartAppFromDBLocaleForDelete() As Boolean
Dim stReturn As Boolean = True
Try
DataStartAppList = DataStartAppDB.GetDataStartListForDelete
Catch ex As SqlException
stReturn = False
Throw ex
End Try
Return stReturn
End Function
Public Shared Function ReadDataEndAppFromDBLocaleForDelete() As Boolean
Dim stReturn As Boolean = True
Try
DataEndAppList = DataEndAppDB.GetDataEndListForDelete
Catch ex As SqlException
stReturn = False
Throw ex
End Try
Return stReturn
End Function
#End Region
Sub New()
End Sub
End Class
, который удаляет записи в ссылочной базе данных, которые я передаю в списке, потому что они удовлетворяют определенным условиям. В форме, где создается соответствующий объект FD и закрепляется его события, эти основные подпрограммы включают в себя:
Private WithEvents FD As FunDeletedLocalData
Private Sub btnAccept_Click(sender As Object, e As EventArgs) Handles btnAccept.Click
btnClose.Enabled = False
btnAccept.Enabled = False
Me.lblRecDeleted.Visible = True
Me.prgBar.Visible = True
Me.Refresh()
Dim FD = New FunDeletedLocalData
If rdTDAll.Checked Then
FD.DeleteAllDataApp()
ElseIf rdStartApp.Checked Then
FD.DeleteOnlyDataStartApp()
ElseIf rdEndApp.Checked Then
FD.DeleteOnlyDataEndApp()
End If
FD = Nothing
btnAccept.Enabled = True
btnClose.Enabled = True
Me.prgBar.Visible = False
End Sub
Private Sub FD_ProgressDeleted(value As Integer) Handles FD.ProgressDeleted
Me.prgBar.Maximum = value
End Sub
Private Sub FD_MaxProgressDeleted(value As Integer) Handles FD.MaxProgressDeleted
Me.lblRecDeleted.Text = "Record Cancellati: " & value.ToString
Me.prgBar.PerformStep()
Me.Refresh()
End Sub
Все работает правильно, и записи фактически удаляются, и у меня нет ошибок. Единственное, что не работает - это события объекта:
RaiseEvent MaxProgressDeleted(DataEndAppList.Count)
RaiseEvent ProgressDeleted(i)
Они не выбрасываются. Как так? В очень похожем классе я бы сказал, что идентичным в том смысле, что оно точно равно единственному различию, является вызов:
DataEndAppDB.DeleteDataEnd(item.IdEndApp)
, поскольку для удаления записи нужен только iD, тогда как в другом классе они принадлежат Тип:
DataEndAppSQLDB.AddEndApp(item)
Не могли бы вы сказать мне, где проблема? Спасибо всем.