Soit j'ai pas bien compris son problème, soit je crois que vous vous acharnez un peu pour rien...
Si tu fais sql.open() et que ce n'est pas asynchrone, ça veux dire que ça bloque le fil d’exécution principal tant que ce n'est pas ouvert. Autrement dit tu fais :
Debut de l'image 0
> Changement de l'image du bouton pour mettre le loading
> Ouverture de la base de donnée
>>>>>> Attente de l'ouverture, donc ça freeze l'écran
> Changement de l'image du bouton pour le remettre normal
Fin de l'image 0
Rendu de l'image 0 sur l'écran
Donc tout ce que tu décris est juste normal. Si tu veux voir le changement d'image, il faut attendre au moins une frame (Mais tu auras l'impression juste que ça clignote parce que ça reste qu'une seule frame) avec une Co-Routine pour que l'image soit rendu à l'écran... Je te conseillerais même de faire une Co-Routine qui attends au moins 0.5s pour que ça soit plus naturel.
Mais il resteras toujours le problème que sql.open() est synchrone et donc que l'ouverture se fait sur une seule frame et donc freeze l'écran.
Icone de chargement lors de la connexion a la base
- boubouk50
- ModoGenereux
- Messages : 6186
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: Icone de chargement lors de la connexion a la base
Ça a dérivé sur la logique plus que sur son problème...simonj a écrit :Soit j'ai pas bien compris son problème, soit je crois que vous vous acharnez un peu pour rien...
Oui, la question du synchrone/asynchrone est là, effectivement.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Re: Icone de chargement lors de la connexion a la base
Donc pour conclure soit j arrive à utiliser la dernière version de la DLL et je fais un open asynchrone sois je laisse freezer et tant pis si ça fait moche ^^
- boubouk50
- ModoGenereux
- Messages : 6186
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: Icone de chargement lors de la connexion a la base
J'ai ce souci depuis belle lurette sur mes applis. Pour l'instant, je mets un panel teinté avec marqué en gros LOADING dessus. C'est statique mais ça explique.
Je ne me suis pas penché du côté du threading, pour empêcher les blocages, peut-être est-ce une solution.
Je ne me suis pas penché du côté du threading, pour empêcher les blocages, peut-être est-ce une solution.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
- E3DStef
- Administrateur
- Messages : 1646
- Inscription : 14 Juil 2013 18:30
- Localisation : https://www.carte-des-membres.com/fr/Unity3D-France/
Re: Icone de chargement lors de la connexion a la base
Et une autre solution de pré charger les infos avant d'en avoir besoin (en tâche de fond) ???
Juste réflexion théorique, jamais testé perso...
A+
Juste réflexion théorique, jamais testé perso...
A+
Le Savoir n'est Précieux que s'il est Partagé
Si besoin urgent de me contacter, faites moi un mail sur : franceunity3d@gmail.com
Si besoin urgent de me contacter, faites moi un mail sur : franceunity3d@gmail.com
Re: Icone de chargement lors de la connexion a la base
Tu peux essayer de faire ça avec un Thread comme ça :
J'utilise une classe Worker pour ouvrir la database car ça te permet de passer des choses en paramètre à un Thread (Ce qui normalement n'est pas possible). Comme par exemple ta variable SQL qui va lui permettre d'ouvrir ta base.
Code : Tout sélectionner
private class Worker
{
public bool isFinished = false;
// Il faut lui mettre le bon type de variable
private SQL _sql = null;
// Il faut lui mettre le bon type de variable
public Worker(SQL a_sql)
{
isFinished = false;
_sql = a_sql;
}
public void OpenSQL()
{
_sql.open();
isFinished = true;
}
}
private IEnumerator OpenSQLAsync()
{
// Loading screen à activer
_UILoadingScreen.Setactive(true);
yield return new WaitForEndOfFrame();
// Il faut lui passer ta variable SQL qui te permet de faire "_sql.open();"
Worker process = new Worker(MySqlDataBase);
Thread thread = new Thread(process.OpenSQL);
thread.Start();
Debug.Log("Process is starting!");
while (!process.isFinished)
{
Debug.Log("Process is running !");
yield return new WaitForEndOfFrame();
}
Debug.Log("Process is finished!");
// Loading screen à désactiver
_UILoadingScreen.Setactive(false);
}