none
Finestra eccezioni, come evitare che compaia? RRS feed

  • Domanda

  • Buongiorno a tutti,

    ho un problema e non riesco a capire come risolverlo. Ho letto tra i vari forum, guide etc. ma non riesco a capire dove sbaglio. Spero possiate aiutarmi.

    Ho sviluppato un software nel quale vado a cancellare un task, quindi mi viene generata un'eccezione che poi vado a intercettare e vado avanti con il programma. 

    Fin qui nessun problema, il software funziona correttamente.

    A volte però compare la classica finestrella di windows che mi avverte che l'eccezione non è stata gestita, premo continua e il software procede come nulla fosse, perché come detto sopra gestisco poi l'eccezione. 

    Nella finestra in fondo compare : 

    ************ Debug JIT ************
    Per attivare il debug JIT, è necessario impostare il valore
    jitDebugging nella sezione system.windows.forms del file di configurazione
    dell'applicazione o del computer (machine.config).
    L'applicazione inoltre deve essere compilata con il debug
    attivato.

    Ad esempio:

    <configuration>
        <system.windows.forms jitDebugging="true" />
    </configuration>


    Ho provato ad inserire il codice nel file App.Config :

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
    	<system.windows.forms jitDebugging="true" />
        <startup> 
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
        </startup>
      <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <dependentAssembly>
            <assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
          </dependentAssembly>
          <dependentAssembly>
            <assemblyIdentity name="System.Text.Json" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-5.0.0.2" newVersion="5.0.0.2" />
          </dependentAssembly>
        </assemblyBinding>
      </runtime>
    </configuration>

    Nel PC dove ho installato Visual studio sembra funzionare, anche perché non sempre si apre questa finestra, nei PC che non hanno Visual studio installato compare praticamente quasi sempre.

    Come faccio a evitare che questa finestra compaia? Ho sbagliato a inserire il codice nel file sbagliato?

    Un grazie a tutti coloro che sapranno darmi una mano!!!

    domenica 15 maggio 2022 09:52

Tutte le risposte

  • Ciao,

    secondo me, il modo più corretto di fermare un task è quello di utilizzare un "Cancellation Token" da controllare nel task chiamato, senza bisogno di generare eccezioni.

    CancellationTokenSource cancToken = new CancellationTokenSource();
    CancellationToken mioToken = cancToken.Token;
    
    Task.Run(() => MioTask(mioToken));
    
    Thread.Sleep(100);
    Console.WriteLine("\nAspetto 5 secondi...");
    Thread.Sleep(5000);
    
    Console.WriteLine("\nLo interrompo !!!");
    cancToken.Cancel();
    cancToken.Dispose();
    Thread.Sleep(3000);
    Console.WriteLine("\nFine programma principale.");
    
    static void MioTask (CancellationToken tok)
    {
        Console.WriteLine("\nTask partito!");
        for (int i=0;i < 10000; i++)
        {
            if (tok.IsCancellationRequested)
            {
                Console.WriteLine("\nTask interrotto!!!");
                break;
            }
            Thread.Sleep(1000);
        }
    }


    domenica 15 maggio 2022 19:27