July 2005 Blog Posts

#End Region"

Succede solo a me che quando scrivo#Region ""#End Region" Mi impazzisce Visual Studio e scrive in giapponese?!

posted @ Tuesday, July 26, 2005 5:24 PM | Feedback (3)

TIN.IT... in tribunale!!!

INCREDIBILE!!! Scusate l'OT, ma questo é veramente troppo!Da settembre mio padre ha sottoscritto un contratto con Fastweb. Io avevo attivo, sulla linea di mio padre, un contratto ADSL con TIN.IT. Ovviamente non ci possono essere 2 contratti ADSL sulla stessa linea quindi il servizio di Tin.it mi é stato prontamente sospeso. Nonostante ciò Tin.it ha pensato di continuare ad addebitarmi le fatture sulla carta di credito e non solo, ma anche di RINNOVARMI TACITAMENTE L'ABBONAMENTO (del servizio che NON mi viene erogato) per un altro anno. Vi sembra normale? Ma la parte migliore deve ancora arrivare: mi é appena arrivata una lettera in...

posted @ Thursday, July 21, 2005 3:02 PM | Feedback (25)

MainThread.Join()

Alla ricerca di una soluzione per il QuizSharp di Adrian mi sono imbattutto in una bella stranezza del Threading: a quanto posso vedere il Thread principale di un'applicazione NON termina finché non terminano tutti i Thread "secondari" con piorità almeno Normal. La prova: class Foo {     static System.Threading.Thread MainThread;     static void SecThread()     {         if (MainThread.IsAlive)          MainThread.Join();        Console.WriteLine("Fine Thread Secondario");    }     static void Main()     {         MainThread = System.Threading.Thread.CurrentThread;         System.Threading.Thread ST = new System.Threading.Thread(new System.Threading.ThreadStart(SecThread));         ST.Priority = System.Threading.ThreadPriority.AboveNormal;         ST.Start();        Console.WriteLine("Fine Thread Principale");    } } Questo codice NON termina MAI, perché la Procedura SecThread che gira nel Thread "secondario" aspetta che il Thread principale dell'applicazione termini, ma questo NON termina!!! L'applicazione raggiunge l'ultima riga di Main, stampa a console "Fine Thread Principale", ma in realtà il Thread principale sopravvive alla fine del Main ed entra nello stato composito di: "Background, Stopped, WaitSleepJoin", tant'é vero che...

posted @ Monday, July 18, 2005 12:43 PM | Feedback (2)

Compilare codice VB.NET "on the fly"

Oggi mi sono trovato per la prima volta a creare delle classi on-the-fly ereditando da una classe base ed estendendo in base a delle informazioni passate. Benché ci siano già parecchi esempi in rete (che comunque ho fatto parecchia fatica a trovare) posto anche il mio esempio che é arricchito di una piccola funzione per aggiungere i riferimenti in maniera semplice.     Dim provider As Microsoft.VisualBasic.VBCodeProvider    Dim compiler As System.CodeDom.Compiler.ICodeCompiler    Dim results As System.CodeDom.Compiler.CompilerResults    'Impostazioni di compilazione    Dim cp As New System.CodeDom.Compiler.CompilerParameters    cp.GenerateInMemory = True 'Non mi interessa salvare su disco    cp.TreatWarningsAsErrors = False    cp.ReferencedAssemblies.Add("System.dll")    AddReferences(cp, GetType(TipoUtilizzatoDalCodiceGenerato))    Try      provider = New Microsoft.VisualBasic.VBCodeProvider      compiler = provider.CreateCompiler      results = compiler.CompileAssemblyFromSource(cp, CodiceGenerato)      If results.Errors.Count = 0 Then        Dim Ass As System.Reflection.Assembly = results.CompiledAssembly        Dim GeneratedType as Type = Ass.GetType("GeneratedType")        'Creo un'istanza del tipo appena creato        Dim O As Object = Activator.CreateInstance(Me.GeneratedType)        'Inserire qui il codice che usa il nuovo oggetto!              Else        'Errore di compilazione!      End If    Catch ex As System.Exception      'Attenzione: qualcosa é andato storto: il compilatore non dovrebbe      'sollevare eccezioni normalmente, ma al massimo riportare errori di      'compilazione in: results.Errors    End Try     Private Sub AddReferences(ByVal cp As System.CodeDom.Compiler.CompilerParameters, ByVal type As System.Type)    For Each M As System.Reflection.Module In type.Assembly.GetModules()      cp.ReferencedAssemblies.Add(M.Name)    Next M    'Analisi tipo base    If Not type.BaseType Is GetType(System.Object) Then      AddReferences(cp, type.BaseType)    End If    'Analisi interfacce    For Each T As Type In type.GetInterfaces      AddReferences(cp, T)    Next T  End Sub

posted @ Thursday, July 14, 2005 5:31 PM | Feedback (2)