Bonjour cher lecteur de ce post,

Je conçois actuellement un plugin pr une application oob, et ceci en silverlight.
Je me connecte donc à mon API, qui utilise le protocole d'authentification OAuth.
Je cherche à récupérer le request token, jusque là j'y parviens sans problème, je récupère bien le jeton, MAIS...

Les requetes asynchrones étant imposées, le résultat est obtenu dans un thread séparé de thread principal, et là malheur, je dois utiliser le jeton ds le main thread pr valider le compte utilisateur, mais dans la même fonction que celle qui a appelé la requête asynchrone...
Bien sûr il m'a paru évident de faire un manualresetevent.waitone(), seulement il est impossible de bloquer le thread principal, sinon l'aplication ne réponds plus...

un exemple du code sera plus parlant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public void AuthenticateAsync(IAccount account, object userState, AsyncCompletedCallback completedCallback)
{
    ... //déclarations ici
    HttpWebRequest req = (HttpWebRequest)WebRequest.Create(baseUrl);
    req.Method = "GET";
    req.Headers[HttpRequestHeader.Authorization] = "OAuth " + ret;
    req.ContentLength = queryString.Length;
    IAsyncResult result = req.BeginGetResponse(new AsyncCallback(GetResponseCallback), req);
    //completedCallback(this, new AsyncCompletedEventArgs(null, false, userState)); c'est la méthode que je dois appeler pr valider le compte (impérativement ici :s)               
}
 
 
private void GetResponseCallback(IAsyncResult asynchronousResult)
{
    HttpWebRequest request = (RequestState)asynchronousResult.AsyncState;
    // End the operation
    HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);
    Stream streamResponse = response.GetResponseStream();
    StreamReader streamRead = new StreamReader(streamResponse);
    string responseString = streamRead.ReadToEnd();
    authToken = OAuthToken.Parse(responseString); //je récupère le jeton (ca marche)
    // Close the stream object
    streamResponse.Close();
    streamRead.Close();
    // Release the HttpWebResponse
    response.Close();
    //allDone.Set(); //rapport au manualresetevent (ne fonctionne pas)
}
le problème est donc que je dois récupérer le jeton dans la première méthode... il est bien sur impossible de faire un timer (forcément ca serait trop facile :p)