|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2009
Messaggi: 609
|
[C#/.NET] Eccezione di Accesso Negato causata da Windows Search?
In questi giorni di studio, sto affrontando il problema delle eccezioni e ho scoperto - con piacere - che il C# supporta anche l'istruzione goto.
Ora, a pensarci bene, l'istruzione goto potrebbe tornare utile nelle eccezioni, ad esempio per uscire da un blocco catch e provare di nuovo ad eseguire le istruzioni contenute nel blocco try, disponendo un'etichetta appena prima dell'istruzione try. Questa soluzione mi è stata utile per risolvere uno strano problema che ho avuto fino ad oggi pomeriggio: quando provavo ad eliminare dei file situati nella cartella Documenti, a volte (e non sempre) mi veniva sollevata un'eccezione di "Accesso negato". E' possibile che sia dovuto a Windows Search di Vista? magari quando provo ad eliminare questi file, in quel momento sono occupati dall'indicizzazione, è possibile? Naturalmente, per evitare cicli di loop all'infinito, ho messo un contatore, per cui i tentativi sono limitati - per mia scelta - a 5. Fin'ora pare che questa soluzione funzioni, però non mi piace, mi sembra troppo un "inciucio" Suggerimenti? Grazie a tutti... |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Ciao.
Come tanti qui dentro penso non voto per il goto comunque mai per codice utente. Per il tuo specifico problema non saprei dirti perche' il file risulti talvolta inaccessibile. Per una possibile "genrica" soluzione simile alla tua, ti propongo la seguente: Codice:
public static class Utility
{
public static bool TryThisForNTimes<T>(Action<T> method, T param,
int NTimes,int Throttling)
{
for(int u=0;u<NTimes;u++)
{
try
{
method(param);
return true;
}
catch
{
Thread.Sleep(Throttling);
}
}
return false;
}
}
- come primo parametro un metodo - come secondo parametro il "parametro che verra' passato al metodo" di tipo generico. - come terzo parametro il numero di volte che si dovra' tentare l'esecuzione del metodo (primo parametro) - come quarto parametro il tempo di attesa tra un tentativo e l'altro in Millisecondi. Restiuira' true o false a seconda che il metodo sia stato effettivamente eseguito con successo oppure no. La funzione si potra' usare cosi': Codice:
bool executed = Utility.TryThisForNTimes(File.Delete, "Pippo.txt", 5, 1000); Ad esempio chiamate a WebService Remoti, che talvolta possono non essere disponibili e per i quali si vuole effettuare almeno un paio di tentativi (talvolta la prima volta in assoluto la risposta e' negativa per sole questioni di negoziazione e di latenze di rete, e dalla seconda in poi invece il risultato risulta essere positivo) E per le quali non serve il parametro di ritorno, se presente, altrimenti si dovra' studiare altro, essendo che viene restituita solo l'informazione sull'avvenuta esecuzione o meno del metodo, e non il suo eventuale risultato.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. Ultima modifica di gugoXX : 17-04-2009 alle 12:47. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Bella gugoXX!
Si può fare una cosa simile anche in Java? Come si potrebbe superare la mancanza della classe Action del C# che rappresenta un metodo? Scusate l'OT ma la cosa è interessante.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2006
Messaggi: 22462
|
direi con un interfaccia; il polimorfismo i questo caso aiuta
__________________
amd a64x2 4400+ sk939;asus a8n-sli; 2x1gb ddr400; x850 crossfire; 2 x western digital abys 320gb|| asus g1
Se striscia fulmina, se svolazza l'ammazza |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:41.



















