Application.DoEvents nicht eindeutig

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von TheGameSiders.

    Application.DoEvents nicht eindeutig

    Hey.

    Ich habe das Problem, dass ich Application.DoEvents nicht nutzen kann, da ich die Skype4Com DLL als Verweis habe.
    Also:


    Kann man die Applicationklasse nicht umbenennen oder sowas?
    Ich brauche diese..

    Danke :)
    Mfg. René

    Edit:
    Erledigt :)

    VB.NET-Quellcode

    1. System.Windows.Forms.Application.DoEvents()

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

    Auch wenn es erledigt ist, das ist total ranzig. Application.DoEvents in ner Schleife? Uaah. Schau Dir entsprechende Alternativen hierfür an, findet man viel, aber Application.DoEvents geht gar nicht.
    Dann einfach Multithreading mit Threads, ThreadPool oder Tasks bzw. async-await.
    Mit Application.DoEvents kann man so viel zerhauen, das glaubst Du gar nicht, denn hinter diesem Aufruf verbergen sich jede Menge Monster, die Blödsinn machen können.

    Außerdem ist sowas wie Namespaces setzen totale Grundlage.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    @TheGameSiders Oder gezielt die sich verändernden Controls Refreshen oder Updaten.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    So, ich zeige euch mal meinen Code, und sage euch warum ich keine Backgroundworker oder anderes benutzen kann!

    VB.NET-Quellcode

    1. ​Imports SKYPE4COMLib
    2. Imports System.IO
    3. Public Class Form1
    4. Dim skype As New Skype
    5. Private Sub skype_MessageStatus(ByVal msg As SKYPE4COMLib.ChatMessage, ByVal status As TChatMessageStatus)
    6. Dim Message As String
    7. Try
    8. If status = TChatMessageStatus.cmsReceived Then
    9. Pause(15000)
    10. Message = msg.Body
    11. msg.Chat.SendMessage(ParseMessage(Message))
    12. End If
    13. Catch
    14. End Try
    15. End Sub
    16. Public Sub Pause(ByVal Milliseconds As Integer)
    17. Dim dTimer As Date
    18. dTimer = Now.AddMilliseconds(Milliseconds)
    19. Do While dTimer > Now
    20. System.Windows.Forms.Application.DoEvents()
    21. Loop
    22. End Sub
    23. Function Dictio(ByVal FilePath As String, ByVal command As String)
    24. command = command
    25. Dim sr As StreamReader = New StreamReader(FilePath)
    26. Dim file As String = sr.ReadToEnd
    27. Dim parts1() As String = file.Split(New String() {Environment.NewLine},
    28. StringSplitOptions.None)
    29. For i = 0 To parts1.Length - 1
    30. Dim tempparts() As String = parts1(i).Split("-")
    31. If command.Contains(tempparts(0).ToLower) Then
    32. Return tempparts(1)
    33. End If
    34. Next
    35. End Function
    36. Function ParseMessage(ByVal message As String)
    37. Dim msg As String = Dictio(My.Computer.FileSystem.CurrentDirectory & "\Config.ini", message)
    38. Me.Refresh()
    39. If msg = "" Or msg = " " Then
    40. Else
    41. End If
    42. Try
    43. Return msg
    44. Catch
    45. End Try
    46. End Function
    47. Private Sub GhostButton27_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GhostButton27.Click
    48. skype.Attach(7, False)
    49. AddHandler skype.MessageStatus, AddressOf skype_MessageStatus
    50. End Sub
    51. End Class


    So wollte ich ein Delay einbauen, um es "Menschlicher" zu machen. Das klappt auch, jedoch nur bei einem Kontakt dann.
    Mit dem Kontakt schreibt der ohne Probleme mit Delay, anderen antwortet er aber nicht mehr.
    Ohne das "Pause(15000)" antwortet er jedem, nur halt ohne Pause.
    Wie mache ich das nun?
    Habe schon versucht über einen Timer die Nachrichten zu senden, doch das ging garnicht..

    VB.NET-Quellcode

    1. ​Imports SKYPE4COMLib
    2. Imports System.IO
    3. Public Class Bot
    4. Dim Skype As New Skype
    5. Dim CurrentSender As SKYPE4COMLib.User
    6. Dim Message As String
    7. Private Sub skype_MessageStatus(ByVal msg As SKYPE4COMLib.ChatMessage, ByVal status As TChatMessageStatus)
    8. Try
    9. If status = TChatMessageStatus.cmsReceived Then
    10. CurrentSender = msg.Sender
    11. Message = Dictio(My.Computer.FileSystem.CurrentDirectory & "\Config.ini", msg.Body)
    12. If Message = "UNHANDLED" Then
    13. Exit Sub
    14. Else
    15. End If
    16. Timer1.Start()
    17. End If
    18. Catch ex As Exception
    19. MsgBox(ex.Message)
    20. End Try
    21. End Sub
    22. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    23. Dim skype As New Skype
    24. MsgBox(CurrentSender.Handle & Message)
    25. skype.SendMessage(CurrentSender.Handle, Message)
    26. Timer1.Stop()
    27. End Sub
    28. Function Dictio(ByVal FilePath As String, ByVal command As String)
    29. Dim sr As StreamReader = New StreamReader(FilePath)
    30. Dim file As String = sr.ReadToEnd
    31. Dim answer As String = "UNHANDLED"
    32. Dim parts1() As String = file.Split(New String() {Environment.NewLine},
    33. StringSplitOptions.None)
    34. For i = 0 To parts1.Length - 1
    35. MsgBox(parts1(i))
    36. Dim tempparts() As String = parts1(i).Split("-")
    37. If command.Contains(tempparts(0).ToLower) Then
    38. answer = tempparts(1)
    39. Exit For
    40. End If
    41. Next
    42. Return answer
    43. End Function
    44. Function ParseMessage(ByVal message As String)
    45. Dim msg As String = Dictio(My.Computer.FileSystem.CurrentDirectory & "\Config.ini", message)
    46. Me.Refresh()
    47. If msg = "" Or msg = " " Then
    48. End If
    49. Try
    50. Return msg
    51. Catch ex As Exception
    52. MsgBox(ex.Message)
    53. Return msg
    54. End Try
    55. End Function
    56. Private Sub GhostButton27_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GhostButton27.Click
    57. Skype.Attach(7, False)
    58. AddHandler Skype.MessageStatus, AddressOf skype_MessageStatus
    59. End Sub
    60. End Class


    Kennt sich jemand mit der Skype API aus?
    Danke :)