[C#] Form principale si blocca mentre un altro Thread lavora

race

Nuovo Utente
10 Ott 2020
16
0
1
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...

Avviandolo da Visual Studio per fare delle prove brevi su 5 gruppi con intervalli di 3 minuti tra i post tutto funziona correttamente.

Quando faccio delle prove più lunghe, tipo alcune ore e con intervalli da 30 minuti tra i post, lo ritrovo con questo errore:

Codice:
Assistente al debug gestito 'ContextSwitchDeadlock' : 'CLR non è riuscito a passare dal contesto COM 0x7b3e00 al contesto COM 0x7b3d48 per 60 secondi. Probabilmente il thread a cui appartiene il contesto/apartment di destinazione è impegnato nell'attesa senza distribuzione o nell'elaborazione di un'operazione a esecuzione prolungata che non prevede la distribuzione di messaggi Windows. Questa situazione in genere ha un impatto negativo sulle prestazioni e può causare una mancata risposta dall'applicazione o un accumulo continuato nel tempo dell'utilizzo della memoria. Per evitare questo problema, è necessario che durante le operazioni a esecuzione prolungata tutti i thread di tipo apartment a thread singolo usino primitive di attesa con distribuzione (ad esempio CoWaitForMultipleHandles) e messaggi distribuiti in base a routine.'

Inoltre un altro dettaglio:
se entro nella cartella del progetto e lo avvio direttamente dall'exe, si apre il programma, lancio il ciclo dei post, poi clicco su un altra finestra in modo da fare perdere il "fuoco" al Form1, mi appare immediatamente la classica scritta di "frizz": (il programma non risponde).

Posto una breve porzione di codice per fare capire come gestisco il programmino:

Codice:
static readonly WebReference.IBot wsIBot = new WebReference.IBot();
private readonly Browser oBrowser = new Browser(wsIBot );

public Form1()
        {
           InitializeComponent();
           
           CheckForIllegalCrossThreadCalls = false;
        }
     
     
[Obsolete]
private void BtnLogin_Click(object sender, EventArgs e)
{
   th = new Thread(new ThreadStart(Login))
   {
      ApartmentState = ApartmentState.STA
   };
}
th.Start();

private void Login
{
    pbLogin.Minimum = 0;
    pbLogin.Value = 0;
    pbLogin.Step = 1;
    pbLogin.Maximum = 8;
    
    oBrowser.UrlLogin = UrlLogin;
    
   oBrowser.OpenBrowser(PrograssBar1);
}


Codice:
class Browser : File
    {
        WebReference.myRef wsRef;
        private dynamic UrlLogin { get; set; } = null;
        private ChromeDriverService service;
        private string UrlLogin = "https://m.facebook.com/login";

        public Browser(WebReference.myRef _wsRef)
        {
            wsIBot = _wsIBot;
        }
     }
        
        public void OpenBrowser(ProgressBar _Pb)
        {
            service = ChromeDriverService.CreateDefaultService();

            //Nascondo la Console
            service.HideCommandPromptWindow = true;

            //Disabilito:
            ChromeOptions options = new ChromeOptions
            {
                PageLoadStrategy = PageLoadStrategy.Normal
            };
            options.AddArguments("--window-size=300,950");
            options.AddArguments("--disable-extensions"); //extension
            options.AddArguments("--disable-notifications"); //notification (PopUp "Notifiche" di Chrome)
            options.AddArguments("--disable-application-cache"); //cache

            driver = new ChromeDriver(service, options);

            driver.Navigate().GoToUrl(UrlLogin.URL_NavigateTo.ToString());

            _Pb.PerformStep();
        }

Questo è una piccola parte del codice.
Mi chiedo:
- non sarà perchè cerco di gestire una ProgressBar su Form1 da un altro Thread?
---> oBrowser.OpenBrowser(PrograssBar1);

- oppure perche passo dei vlaori a delle Propertyes da Form1 alla classe Brovser su un nuovo thread?
---> oBrowser.UrlLogin = UrlLogin;

Non so da dove partire per vedere cosa sta succedendo, potreste darmi dei consigli per vedere se mi sblocco?

Vi ringrazio molto.
 
Discussioni simili
Autore Titolo Forum Risposte Data
P Passare solo una variabile di un form a pagina principale Javascript 1
B passaggio dati da popup a form principale Javascript 0
L inserimento form dati multipli ? PHP 0
L Problemi form Pagina php HTML e CSS 2
Cosina Creare bottone delete in form upload PHP 4
Cosina Creare bottone delete in form upload PHP 1
D Devo far funzionare un form di contatti PHP 4
B form gestione input PHP 2
V PHP form intersecate PHP 0
8 Javascript - PDF Form Javascript 0
J Form inserimento dati in database Ajax 1
E Gestione profilo utente tramite Form PHP 3
M Problema con controllo form in real time jQuery 6
D Form validazione Javascript 2
R form recovery pass PHP 0
V Symfony e i form PHP 3
M form con checkbox PHP 8
S come aggiustare un form di contatto? HTML e CSS 3
F query e form con select multipla PHP 17
AC1 Form in finestra modale PHP 1
MarcoGrazia Verifica di una stringa o di un nome proveniente da form Snippet PHP 0
A Inserimento dati nel database tramite form + altre operazioni PHP 18
websilvia Contact form using Bootstrap 3.3.4 PHP 8
Alex_70 Button non funziona nella form PHP 2
C Form email php su pagina index.html? PHP 21
W Rinominare Documenti Con Form Asp Classic ASP 9
S Invio email da form PHP 8
L form multipla php sql,errore in inserimento MySQL 0
L inviare i dati di un form ad un database PHP 6
L Collegare un form html ad un database access Javascript 2
L creare oggetti da una classe tramite un form Javascript 0
G Impostare suggerimenti campo text di un form Javascript 2
S Problemi di visualizzazione form contatti sito web HTML e CSS 2
L Insert php sql da una form multipla PHP 6
E form PHP 10
W Form da CDONTS a CDOSYS Classic ASP 7
P Problema concantenazione form Javascript 3
webmachine [PHP] [JAVASCRIPT] Form strano in HTML PHP PHP 1
G Form in php WordPress 0
K La pagina index, si apre sul form e non al top page Javascript 0
A Aprire la window form Add Connection da codice Visual Basic 4
F [PHP] Form html PHP 2
G FORM HTML E PHP PHP 0
max1974 [HTML] Columns grid on modal form HTML e CSS 0
S [PHP] Recupero nome immagine da Form con input file PHP 3
U PHP bottone per invio mail o ritorno al form PHP 15
O [PHP] inviare dati da form e script ajax PHP 0
A [ASP] Confronto tra dati Form e DB Classic ASP 2
B [PHP] Creare PDF dopo inserimento dati form PHP 4
C [PHP] Form con Inserimento dati dalla maschera e un menù a discesa che prende i dati dal db PHP 1

Discussioni simili