Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [C#] ...Javascript, sincronicità

    Salve, sono parecchie settimane che cerco di risolvere questo problema ma ho avuto scarsi risultati:

    Sto facendo una libreria in C# che deve mettere a disposizione alcuni metodi (sincroni). Ho una form nascosta per utilizzare il componente WebBrowser che mi permette di caricare una pagina .html e utilizzare delle funzioni javascript in esso contenuti.

    Il problema sta nel fatto che la funzione che devo utilizzare dal javascipt è asincrona...del tipo

    codice:
    function funzione_async(){
       //... qua non posso ritornare niente!!!!
    }
    
    function funzione_ritorno_ok(){
      //... qua ritorno il risultato della funzione_async
    
      return risultato;
    }
    Dal c# ho una funzione del tipo

    codice:
    public Object funzioneSincrona(){
    		
    	return wb.Document.InvokeScript("funzione_async", "argomenti");
    
    }
    Duque la mia funzione in c# non può ritornare direttamente il risultato della funzione javascript poichè è asincrona.

    Le possibili strade da me percorse sono state le seguenti:

    1) rendo la funzione javascript sincrona!!! Come? con un while(!fine_calcolo); Risultato: la cpu va al 100% e il javascript non mette a disposizione sleep() o metodi simili.
    2) nel c#, dopo l'invokeScript, attendo finchè una variabili in javascript (un hidden field) non cambia stato ma il problema è che se attendo mi si blocca anche il componente webBroswer non permettendo più l'esecuzione dello script.

    C'è qualche anima pia che può darmi una mano? sono disperato!

    grazie mille

  2. #2
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,537
    in che modo sono collegati la funzione che chiami (javascript) e la funzione che risponde (sempre javascript)?

    praticamente tu chiami la pagina che esegue dei javascript (lato client quindi) le cui risposte in genere vanno inviate al server per essere elaborate oppure concludono le loro operazioni lato client, ora questa dovrebbe essere la logica dei javascript. Se devi fare un utilizzo diverso (quindi sia il client che il server sono la stessa macchina) tanto vale che lavori direttamente in c# senza javascript

    magari facci capire un po meglio di che si tratta, perchè vista cosi (perlomeno a me) non dice niente di realizzabile o logico.

    prova a postare il contenuto dei javascript cosi magari potremmo comprendere il lavoro che deve svolgere in maniera "asincrona" il client (webbrowser), non riesco ad immaginarlo...

  3. #3
    Originariamente inviato da U235
    in che modo sono collegati la funzione che chiami (javascript) e la funzione che risponde (sempre javascript)?

    praticamente tu chiami la pagina che esegue dei javascript (lato client quindi) le cui risposte in genere vanno inviate al server per essere elaborate oppure concludono le loro operazioni lato client, ora questa dovrebbe essere la logica dei javascript. Se devi fare un utilizzo diverso (quindi sia il client che il server sono la stessa macchina) tanto vale che lavori direttamente in c# senza javascript

    magari facci capire un po meglio di che si tratta, perchè vista cosi (perlomeno a me) non dice niente di realizzabile o logico.

    prova a postare il contenuto dei javascript cosi magari potremmo comprendere il lavoro che deve svolgere in maniera "asincrona" il client (webbrowser), non riesco ad immaginarlo...
    Intanto grazie per la risposta.

    Il VERO problema è dovuto dal fatto che sono ad utilizzare le API di Google Maps appunto scritte in javascript....il mio itento è fare da ponte tra alcune funzionalità delle API di Google e la mia libreria.

    La funzione che crea IL problema è la "load" della classe GDirections che è appunto asincrona.

    http://code.google.com/apis/maps/doc...ml#GDirections

    Spero di aver chiarito un attimo meglio il problema

    molte grazie

  4. #4
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,537
    non ho mai usato le api google maps, ma da quanto ho capito devi gestire tutto tramite javascript, c# ti puo' servire solo per "scrivere" gli script ad hoc da inviare ad un client che si incaricherà di gestire il tutto ma sempre lato client. penso che se tu abbia bisogno di ricevere dati da elaborare con c# debba pensare piu' ad asp.net e gestire tutto tramite il classico client-server, quindi tutta l'elaborazione verra gestita in un secondo momento (quando invii i dati al "server") e non metre lavori lato client. A limite potresti gestire gli eventi di javascript per comunicare al "server" quando necessario, ma non credo che sia il "c#" a dovere chiamare lo script come tecnicamente fai ora perchè comunque puoi invocare gli script ma non puoi gestire la logica se non dentro il client stesso, e sarà lui a inviare dati, non il c# a richiederli.

    poi ti ripeto, io non mi sono mai cimentato in cio', quindi magari ci sono cose che non so ho magari che ho capito male

  5. #5
    Grazie per la risposta, ma io devo creare una libreria in c#. Potrei dunque utilizzare una pagina ASP.NET che mi fa l'elaborazione e poi in "qualche modo" prelevare i risultati nella libreria c#?

    grazie molte

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.