Probleme mit ASYNC WAIT

  • VB.NET
  • .NET 4.5

SSL ist deaktiviert! Aktivieren Sie SSL für diese Sitzung, um eine sichere Verbindung herzustellen.

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

    Probleme mit ASYNC WAIT

    Hi,

    ich habe hier ein ziemlich blödes Problem.

    VB.NET-Quellcode

    1. Public Async Sub AsyncRestoreClipboard()
    2. Await Task.Delay(3000) 'Wait 3 seconds


    Fehler BC30456 "Delay" ist kein Member von "Task".

    Natürlich habe ich den notwendigen Imports verwendet, damit Task gefunden wird.

    VB.NET-Quellcode

    1. Imports System.Threading.Tasks 'Required for asynchroneous wait


    Irgendwas mag er nicht.

    Das merkwürdige ist, dass die Anweisung in einem anderen Projekt problemlos funktioniert.

    Klar, jetzt ratet ihr mir, die beiden Anwendungen zu vergleichen und zu schauen was unterschiedlich ist. Das hab ich getan:

    Der ObjectExplorer zeigt in beiden Projekten genau das Gleiche. Auch die Auflösung ist identisch (s. Anhang).

    Was zum Teufel mache ich denn hier falsch ?

    LG
    Peter
    Bilder
    • s 2017-09-13 09-02-179.jpg

      33,99 kB, 990×267, 11 mal angesehen
    Also: Ich konnte dein Problem NICHT nachstellen.
    Hab ein neues VB Projekt aufgemacht, Import auf System.Threading.Tasks gemacht und

    VB.NET-Quellcode

    1. Imports System.Threading.Tasks
    2. Public Class Form1
    3. Public Async Sub AsyncRestoreClipboard()
    4. Await Task.Delay(3000)
    5. End Sub
    6. End Class
    gemacht. Alles wunderbar. Kein Intellisense Fehler, kein Runtime Error. Nix!

    Vorschlag meinerseits: Versuch doch mal das Projekt zu bereinigen. Evtl hilft das

    Lg Radinator
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    Spekulatius: zu niedriges Framework eingestellt? Bei 4.0 geht es nicht, bei 4.5 schon.
    ― Eine häufig von mir verwendete Abkürzung: CEs = control elements (Labels, Buttons, DGVs, ...)
    ― Meine wichtigste Programmiererkenntnis: Mühsam erhängt sich das Eichhörnchen.
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«
    Ne, das mit dem "Bereinigen" hat leider nix gebracht. Aber ich habe jetzt doch einen Unterschied gefunden In dem Projekt, wo die Anweisung funktioniert, werden zwei Imports MEHR generiert (s. Anhang)

    Wenn ich die Imports am Beginn selbst einfüge, werden die allerdings grau angezeigt, also nicht verwendet.

    VB.NET-Quellcode

    1. Imports System.Collections.Generic
    2. Imports System.Diagnostics
    3. Imports System.Runtime.CompilerServices


    Und folgerichtig ändert sich auch nichts an der Fehlermeldung.

    Ratlos !

    LG
    Peter
    Bilder
    • s 2017-09-13 09-15-579.jpg

      34,82 kB, 928×267, 12 mal angesehen
    Hast Du meinen Post geprüft?
    ― Eine häufig von mir verwendete Abkürzung: CEs = control elements (Labels, Buttons, DGVs, ...)
    ― Meine wichtigste Programmiererkenntnis: Mühsam erhängt sich das Eichhörnchen.
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«
    Jau ... ich habe deinen Post erst nach dem Abschicken gelesen !

    Du hast mit deiner Einschätzung vollkommen Recht: bei mir war - weiß der Teufel warum - Framework 4.0 eingestellt. Mit 4.6 werden die gleichen Imports generiert und der Befehl klappt.

    Víelen Dank an die Ratgeber, Daumen hoch, mein Tag ist gerettet. :)

    LG
    Peter
    @Peter329 In so einem Fall wäre es hilfreich, wenn Du den Tag im Thread dann auch auf .NET 4 stellst und nicht .NET 4.5. ;)
    .NET 4 hat halt noch kein TAP, sondern nur die TPL. Du kannst das aber auch für .NET 4 nachrüsten, indem Du Microsoft.Bcl.Async installierst. Allerdings wird dann halt für die neuen Methoden wie ​Delay oder ​GetAwaiter über ​await die ​Task-Klasse zu ​TaskEx. Aber wenn Du sowieso >= .NET 4.5 nutzen kannst/willst, dann ist das besser.

    Es ist btw fraglich, ob Deine Methode so Sinn macht. Stattdessen könntest Du da die ​async ​await-Modifizierer weglassen und einfach einen Task zurückgeben. Erst den dann in einem passenden Handler awaiten. Das ist aber nur Spekulation, weil nicht klar ist, wie Dein Code diesbezüglich aussieht.

    Grüße
    #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 Fragen per PN, denn dafür ist das Forum da :!:
    @Trade

    ne ne, ich will schon mit .NET 4.5 (oder genauer 4.6 - aber das kann man ja bei euch nicht einstellen) arbeiten. Ich war fest der Meinung, dass dies auch der Fall ist, aber jetzt ist das ja klar.

    Ich will einfach nach drei Sekunden ein paar Variable zurücksetzen. Ich denke nicht, dass ich dafür einen eigenen Handler brauche.

    LG
    Peter