2011-06-02 4 views
0

J'ai une application de gestion de ticket de service et les utilisateurs veulent ouvrir plusieurs détails de ticket sur un onglet dans un cadre MDI. Étant donné que cette application doit communiquer via le service Web XML avec d'autres sociétés, cela prend environ 15 ~ 20 secondes. Les utilisateurs se plaignent le plus: il doit attendre que le processus d'enregistrement soit terminé. Le curseur fonctionne pendant que les données sont sauvegardées et d'autres ne peuvent pas être effectuées.processus en cours d'exécution vb.net

Quel est le moyen le plus efficace pour laisser l'utilisateur ouvrir une autre fenêtre et faire autre chose ou enregistrer des données pendant que les données sont sauvegardées à partir d'autres fenêtres? Par ailleurs, il s'agit d'une application VB.Net/Windows.

Répondre

1

Vous pouvez utiliser un BackgroundWorker ou un nouveau thread. Personnellement, j'essayer d'utiliser les méthodes intégrées asynchrones, telles que BeginInvoke

http://www.developer.com/net/vb/article.php/1443981/Asynchronous-Web-Services-for-Visual-Basic-NET.htm

Gardez à l'esprit que les opérations asynchrones se compliquent très rapidement, une bonne desighned en très important.

+0

Quelle est la différence entre BackgroundWorker ou un nouveau thread? – Hoorayo

+0

@Hoorayo: BackgroundWorker exécute une opération sur un thread distinct. Lire la référence que j'ai fournie ... –

+1

Un nouveau thread est une version rawer d'un BackgroundWorker. Le worker encapsule un nouveau thread mais fournit des méthodes simples pour démarrer/arrêter/annuler le travail. Il soulève également des événements afin qu'il puisse signaler la progression de votre thread principal plus facilement. Comme je l'ai dit dans mon post, il y a déjà la méthode BeginInvoke que vous pouvez utiliser en supprimant le besoin d'un nouveau thread. – pingoo

0

J'ai écrit un service Web qui fait partie d'une solution qui doit partir et exécuter une méthode qui prend beaucoup de temps à parcourir. Après quelques expérimentations, j'ai décidé qu'il était plus simple de lancer la tâche de longue durée dans un nouveau thread dans le service Web et de renvoyer un objet personnalisé à l'application appelante (qui est ensuite utilisée plus tard).

<WebMethod()> Public Function StartChecks() As ResponseItem 

    Dim t As New Thread(New ThreadStart(AddressOf Me.StartWork)) 
    t.Start() 

    Return New ResponseItem(CheckGUID.ToString) 

End Function