Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Destiny Rising: quando un gioco mobile supera il gioco originale
Destiny Rising: quando un gioco mobile supera il gioco originale
Tra il declino di Destiny 2 e la crisi di Bungie, il nuovo titolo mobile sviluppato da NetEase sorprende per profondità e varietà. Rising offre ciò che il live service di Bungie non riesce più a garantire, riportando i giocatori in un universo coerente. Un confronto che mette in luce i limiti tecnici e strategici dello studio di Bellevue
Plaud Note Pro convince per qualità e integrazione, ma l’abbonamento resta un ostacolo
Plaud Note Pro convince per qualità e integrazione, ma l’abbonamento resta un ostacolo
Plaud Note Pro è un registratore digitale elegante e tascabile con app integrata che semplifica trascrizioni e riepiloghi, offre funzioni avanzate come template e note intelligenti, ma resta vincolato a un piano a pagamento per chi ne fa un uso intensivo
Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy?
Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy?
Google Pixel 10 è uno smartphone che unisce una fotocamera molto più versatile rispetto al passato grazie allo zoom ottico 5x, il supporto magnetico Pixelsnap e il nuovo chip Tensor G5. Il dispositivo porta Android 16 e funzionalità AI avanzate come Camera Coach, mantenendo il design caratteristico della serie Pixel con miglioramenti nelle prestazioni e nell'autonomia. In Italia, però, mancano diverse feature peculiari basate sull'AI.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 22-01-2021, 09:32   #1
qwerty_race
Member
 
Iscritto dal: Jun 2020
Messaggi: 50
[C#] Incrementare una ProgressBar da un altro Thread

Buongiorno,
ho fatto un programmino in "Win Form" con Visual Studio 2019.

Questo programmino posta sui gruppi Facebook tramite "Selenium + Chrome Driver", quindi apre un Browser e simula tutti i passaggi umani.

Ho fatto il "Form1" quindi l'interfaccia utente dove si realizza il post e si seleziona i gruppi dove postare,
attraverso un nuovo Thread avvio una nuova istanza di "Chrome Driver", quindi mi si apre il browser e inizia tutte le procedure, login, post, etc...

Tra i vari controlli ho una ProgressBar alla quale non riesco ad applicare l'avanzamento dall'altro Thread,
ho letto la guida ufficiale MSN ma la struttura del mio programma non è come nell'esempio e non riesco ad interpretarla per me.

la mia struttura è cosi:

Form1:
Interfaccia Utente, dove c'è la ProgressBar.

Codice:
       private Browser oBrowser = new Browser();


        public Form1()
        {
            InitializeComponent();
        }


        private void BtnLogin_Click(object sender, EventArgs e)
        {
                th = new Thread(new ThreadStart(Login))
                {
                    ApartmentState = ApartmentState.STA
                };
                th.Start();
        }


        private void Login()
        {
            //Apro il Browser
            oBrowser.OpenBrowser(wbHidden);

            //Faccio Login su Facebook
            if (oBrowser.Login(txtUser.Text, txtPass.Text))
            {
                //Controllo se sono loggato
                if (!oBrowser.CheckLogin())
                {
                    MessageBox.Show("Username o Password sbagliati", "Attenzione!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else
                {
                    //Login effettuato
                }
            }
        }
La mia Classe Browser dove devo incrementare la mia ProgressBar
Codice:
    class Browser : File
    {
        public bool Login(string _username, string _password)
        {
            //codice .....

            myProgBar.PerformStep();

            //codice .....

            myProgBar.PerformStep();

            //codice .....

            myProgBar.PerformStep();
        }
    }
Potreste darmi una mano per vedere se riesco?

Vi ringrazio molto.
qwerty_race è offline   Rispondi citando il messaggio o parte di esso
Old 25-01-2021, 21:52   #2
antonio338
Senior Member
 
L'Avatar di antonio338
 
Iscritto dal: Aug 2003
Messaggi: 1174
Devi chiamare Invoke dal controllo che è ospitato nel thread della UI.
Questo dalla documentazione ufficiale: https://docs.microsoft.com/it-it/dot...e?view=net-5.0

Da dove arriva Invoke? E' presente nella classe Control che tutti i controlli di Winforms implementano.
Prendendo il tuo codice quindi diventerebbe:
Codice:
myProgBar.Invoke(delegato)
dove delegato è un metodo che non ha argomenti e restituisce void.
Possiamo usare un delegato anonimo, facendo il cast su MethodInvoker che è un delegato che corrisponde al nostro caso.
Codice:
myProgBar.Invoke((MethodInvoker) delegate {myProgBar.PerformStep(); })
Se hai molti metodi che devono essere eseguiti però diventa più mantenibile esporre dei metodi pubblici dal form che ospita i controlli, ipotizzando che myProgBar sia in Form1 potresti aggiungere:
Codice:
public void DoProgress()
{
if (InvokeRequired)
{
Invoke((MethodInvoker)delegate{ myProgBar.PerformStep();});
}
else
{
myProgBar.PerformStep();
}
}
Cosi facendo però devi ripetere questo codice per ogni controllo che necessità di Invoke.
Come risolvere? Usando un metodo di estensione, la cui documentazione è cui:
https://docs.microsoft.com/it-it/dot...ension-methods
Il tuo metodo di estensione sarà molto simile all'esempio precedente:
Codice:
static public void SafeExecute(this Control control, Action codice)
{
if (control.InvokeRequired)
{
control.Invoke(codice);
}
else
{
codice();
}
}
Quindi in fin dei conti potrai eseguire solo:
Codice:
myProgBar.SafeExecute(() => myProgBar.PerformStep());
Ricorda che per vedere i metodi di estensione dall'Intellisense devi esplicitamente importare lo spazio dei nomi dove è contenuto
__________________
VENDITORI ONESTI: krieger, Corrente Elettrica, Cina.Z, Poliacido, Fedemike82, Lucas01, rikop, SystemR89
VENDITORI DA EVITARE: Ancora nessuno

Ultima modifica di antonio338 : 25-01-2021 alle 21:55.
antonio338 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Destiny Rising: quando un gioco mobile supera il gioco originale Destiny Rising: quando un gioco mobile supera il...
Plaud Note Pro convince per qualità e integrazione, ma l’abbonamento resta un ostacolo Plaud Note Pro convince per qualità e int...
Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy? Google Pixel 10 è compatto e ha uno zoom ...
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre Prova GeForce NOW upgrade Blackwell: il cloud ga...
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco Ecovacs Deebot X11 Omnicyclone: niente più...
Interlune creerà un centro di ric...
Stop Killing Games: 97% delle firme conv...
La GTX 2080 Ti mai arrivata sul mercato,...
Hoolow Knight: Silksong, il gioco che a ...
Duolingo crolla in Borsa: la minaccia ar...
Battlefield 6: i giocatori console potra...
Citroen Racing, la marca ritorna alle co...
Windows 10 ESU: come partecipare al prog...
ASUS Vivobook 16X a meno di 470€ su Amaz...
Con Agent Payments Protocol di Google gl...
Windows 10 muore, gli attivisti insorgon...
NVIDIA sarà il primo cliente di T...
Stellantis cancella il pick-up elettrico...
Microsoft termina il supporto per Office...
VaultGemma di Google è il primo L...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 04:32.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v