Aktion Synchron Ausführen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Toorms.

    Aktion Synchron Ausführen

    Guten Tag Zusammen,

    wenn ich bei mir auf einen Button klicke, wird eine Methode aufgerufen, welche eine Datei signiert. Nun sieht der ButtonClick in etwa so aus:

    "ButtonClick"

    VB.NET-Quellcode

    1. Try
    2. Dim strCertPassword As String = txtBxCertPassword.Text
    3. Dim blnSuccessCheck As Boolean
    4. If String.IsNullOrEmpty(txtBxFilePath.Text) Then
    5. MessageBox.Show("File is missing. Please browse to your file.")
    6. ElseIf String.IsNullOrEmpty(txtBxCertPassword.Text) Then
    7. MessageBox.Show("Certificate Password cannot be empty.")
    8. Else
    9. lblSigingInProgress.Visible = True
    10. pbSigningInProgress.Visible = True
    11. blnSuccessCheck = mobjCodeSigner.SignCode(mstrSafeFilePath, mstrCertfilePath, strCertPassword, mstrFileName)
    12. If blnSuccessCheck = True Then
    13. lblSuccessfullySigned.Visible = True
    14. pbSuccessfullySigned.Visible = True
    15. lblSigingInProgress.Visible = False
    16. pbSigningInProgress.Visible = False
    17. btnSignFile.Enabled = False
    18. ElseIf blnSuccessCheck = False Then
    19. lblSigingInProgress.Visible = False
    20. pbSigningInProgress.Visible = False
    21. lblFileNotSuccessfullySigned.Visible = True
    22. pbNotSuccessfullySigned.Visible = True
    23. End If
    24. End If
    25. Catch ex As Exception
    26. MessageBox.Show(ex.ToString)
    27. End Try


    Das Ding ist aber, wenn ich auf den Button geklickt habe, startet er sofort den Methodenaufruf:

    VB.NET-Quellcode

    1. mobjCodeSigner.SignCode(mstrSafeFilePath, mstrCertfilePath, strCertPassword, mstrFileName)


    setzt aber nicht die beiden Controls vorher auf True:

    VB.NET-Quellcode

    1. lblSigingInProgress.Visible = True
    2. pbSigningInProgress.Visible = True


    Die Application verhält sich auch so, dass sie quasi einfriert, solange die Methode "mobjCodeSigner.SignCode" läuft.

    SignCode sieht so aus:

    "CodeSigner Methode"

    VB.NET-Quellcode

    1. Imports CAPICOM
    2. Public Class clsCodeSigner
    3. Public Function SignCode(strFullFilePath As String, strFullCertFilePath As String, strCertPassword As String, strApplicationName As String)
    4. Try
    5. Dim objSignCode As New SignedCode
    6. Dim objSigner As New Signer
    7. objSigner.Load(strFullCertFilePath, strCertPassword)
    8. objSigner.Options = CAPICOM_CERTIFICATE_INCLUDE_OPTION.CAPICOM_CERTIFICATE_INCLUDE_END_ENTITY_ONLY
    9. objSignCode.FileName = strFullFilePath
    10. objSignCode.Description = strApplicationName
    11. objSignCode.Sign(objSigner)
    12. objSignCode.Timestamp("http://timestamp.verisign.com/scripts/timestamp.dll")
    13. Return True
    14. Catch ex As Exception
    15. MessageBox.Show(ex.ToString)
    16. Return False
    17. End Try
    18. End Function
    19. End Class


    Kann das von euch jemand etwas aufklären? Danke euch!
    Hallo

    Ich empfehle dir Async/Await hier zu verwenden damit die Anwendung nicht einfriert.
    Ein gutes Totorial findest du hier.



    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Und wo ist dein Code??
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Verzeihung

    Spoiler anzeigen

    VB.NET-Quellcode

    1. ​Private Async Sub btnSignFile_ClickAsync(sender As Object, e As EventArgs) Handles btnSignFile.Click
    2. Try
    3. Dim strCertPassword As String = txtBxCertPassword.Text
    4. Dim blnSuccessCheck As Boolean
    5. If String.IsNullOrEmpty(txtBxFilePath.Text) Then
    6. MessageBox.Show("File is missing. Please browse to your file.")
    7. ElseIf String.IsNullOrEmpty(txtBxCertPassword.Text) Then
    8. MessageBox.Show("Certificate Password cannot be empty.")
    9. Else
    10. lblSigingInProgress.Visible = True
    11. pbSigningInProgress.Visible = True
    12. blnSuccessCheck = Await mobjCodeSigner.SignCode(mstrSafeFilePath, mstrCertfilePath, strCertPassword, mstrFileName)
    13. If blnSuccessCheck = True Then
    14. lblSuccessfullySigned.Visible = True
    15. pbSuccessfullySigned.Visible = True
    16. lblSigingInProgress.Visible = False
    17. pbSigningInProgress.Visible = False
    18. btnSignFile.Enabled = False
    19. ElseIf blnSuccessCheck = False Then
    20. lblSigingInProgress.Visible = False
    21. pbSigningInProgress.Visible = False
    22. lblFileNotSuccessfullySigned.Visible = True
    23. pbNotSuccessfullySigned.Visible = True
    24. End If
    25. End If
    26. Catch ex As Exception
    27. MessageBox.Show(ex.ToString)
    28. End Try
    29. End Sub
    Hallo

    Du musst das Tutorial aber lesen und versuchen zu verstehen. Wenn du innerhalb von Minuten Antwortest weis ich das du das nicht gemacht hast.

    z.b.

    VB.NET-Quellcode

    1. Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Me.lblWait.Visible = True
    3. Me.Cursor = Cursors.WaitCursor
    4. Dim returnedValue = Await SignCodeAsync()
    5. Me.Cursor = Cursors.Default
    6. Me.lblWait.Visible = False
    7. MessageBox.Show(returnedValue.ToString())
    8. End Sub
    9. Private Async Function SignCodeAsync() As Task(Of Boolean)
    10. Return Await Task.Run(Function() SignCode())
    11. End Function
    12. Private Function SignCode() As Boolean
    13. Threading.Thread.Sleep(10000)
    14. Return True
    15. End Function


    Außerdem mach bitte mal Option Strict On, weil eine Function ohne Rückgabewert ist dann gar nicht erst zulässig!!!!

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Nofear23m“ ()

    Oder einfach so:

    VB.NET-Quellcode

    1. Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Me.lblWait.Visible = True
    3. Me.Cursor = Cursors.WaitCursor
    4. Dim returnedValue = Await Task.Run(AddressOf SignCode)
    5. Me.Cursor = Cursors.Default
    6. Me.lblWait.Visible = False
    7. MessageBox.Show(returnedValue.ToString())
    8. End Sub
    9. Private Function SignCode() As Boolean
    10. Threading.Thread.Sleep(10000)
    11. Return True
    12. End Function