Asynchrone appel de fonction dans Flex
Est-il possible d'appeler une fonction asynchrone dans Flex? Je veux analyser un fichier, à intervalles réguliers, sans bloquer le reste de l'application, ce qui est l'approche recommandée pour cela?
OriginalL'auteur Abdullah Jibaly | 2009-02-19
Vous devez vous connecter pour publier un commentaire.
Actionscript ne prend pas en charge le multithreading, qui, je pense, est ce que vous êtes vraiment se demander ici.
Tandis que la fonctionnalité n'est pas inhérent à actionscript (ou Flex), vous pourriez mettre en place une maquette du système à l'aide d'événements et de chronomètres.
Je suis un peu dans le flou sur les dates exactes de votre question, donc je vais donner deux réponses:
1) Vous voulez traiter un fichier toutes les quelques secondes pour agir sur toutes les modifications.
Dans ce cas, tout ce que vous devez faire est de configurer un minuteur pour vérifier le fichier périodiquement:
2) que Vous souhaitez analyser un fichier très volumineux, mais vous ne voulez pas de l'application pour accrocher tout en le faisant.
Si vous voulez traiter le fichier en arrière-plan, tout en gardant l'application principale sensible alors je serais probablement créer une fonction qui permettrait d'analyser plusieurs lignes du fichier et l'envoyer ensuite à un événement et de retour. Écouter l'événement et démarrer une minuterie qui serait d'attendre quelques millisecondes avant l'appel de la fonction pour analyser le prochain jeu de lignes.
Ce serait briser l'analyse d'un fichier volumineux avec suffisamment de temps pour garder le reste de votre application en cours d'exécution en douceur. Vous devez jouer avec le minuteur d'intervalle et le nombre de lignes à analyser à la fois de trouver un bon équilibre entre la réactivité et le temps nécessaire pour analyser le fichier.
L'espoir qui fait sens!
Vous avez absolument raison, j'ai supprimé le code erroné de ma réponse, pour que personne ne tente de l'utiliser.
Une bien meilleure façon est de séparer la routine d'analyse en récursif appels de méthode, qui serait appelée à l'aide de callLater
OriginalL'auteur Matt Guest
La réponse la plus simple est d'utiliser le
callLater
routine - voir la documentation ici.Une autre approche consiste à utiliser la
setTimeout
appel, défini dans leflash.utils
paquet. Celui-ci vous permet d'appeler une routine après un laps de temps s'est écoulé. Utilisez cette routine, vous pouvez configurer votreparseFile
la fonction à appeler lui-même à plusieurs reprises, de vous donner les intervalles réguliers que vous recherchez:OriginalL'auteur Matt Dillard
Fait intéressant, juste hier, j'ai décrit une solution à ce problème, en réponse à une autre question.
OriginalL'auteur erikprice
Ce que vous avez besoin est un concept appelé Fils verts. Il y a un vert filetage lib là-bas, mais je n'ai pas utilisé il.
La mise en œuvre que j'ai fait pour un processus d'importation (1 - 5 minutes) suivi combien de temps les exécutions ont pris et autorisé pour une durée configurable par cycle. Cela vous permet de choisir le nombre d'images que vous avez laissé tomber (nous étions tout simplement de la mise à jour d'un modal de la barre de progression). J'ai aussi sous-classé avec une version qui a couru à travers une ICollectionView avec un IViewCursor et a tiré hors de l'événement avec chaque élément.
Je ne peux pas fournir le code source en raison de sa connexion avec un produit commercial, mais le concept est assez simple à mettre en œuvre.
OriginalL'auteur Richard Szalay
Il y a aussi un
setInterval
fonction qui va appeler une fonction à intervalles réguliers, ce qui pourrait être utile.OriginalL'auteur igkuk7
setTimeout et setInterval sont à la fois obsolète.
La classe Timer permet non seulement un retard, mais également une repeatCount: combien de fois il faudra jeter un événement de MINUTERIE et de lancer le décompte de nouveau. Sans doute, on pourrait l'appeler myTimer.stop() à l'intérieur de l'événement avant de faire ce que tu voulais faire, et myTimer.start() lorsque l'on a fait.
Acclamations
OriginalL'auteur Richard Haven