C#

Gestione efficiente delle stringe

Segnalo quest'illuminante post del grande Balena: Usare il string intern pool per scrivere codice più efficiente IMHO tecnica assolutamente da adottare quando si manipolano grandi quantità di stringhe in memoria. powered by IMHO

IE senza il peso di mshtml.dll

Segnalo questo controllo con licenza LGPL che consente di embeddare internet explorer senza doversi portare in giro la "pesante" mshtml.dll. Tra l'altro credo sia anche utilizzato nel progetto RSS Bandit powered by IMHO 1.2 with Emoticon Formatter

Embed Win32 resources in C# programs

Questa non la sapevo ed è stata una scoperta interessante e molto utile. Internet Explorer supporta diversi protocolli, tra cui il protocollo res (Qui un articolo interessante del lontano gennaio 1999 di Dino Esposito). Il protocollo res consente di estrarre una risorsa Win32 da una dll o da un eseguibile. Quindi, se per esempio abbiamo un'applicazione che ospita Internet Explorer (ad es. IMHO  ), possiamo dare in pasto al browser qualsiasi tipo di file senza renderlo facilmente fruibile...

Utilizzare assembly sparsi nel filesystem

Problema: il nostro codice utilizza un assembly che non risiede nè nella directory dell'eseguibile nè in una sua sottodirectory (Infatti se di sottodirectory si trattasse sarebbe sufficiente utilizzare il metodo System.AppDomain.CurrentDomain.AppendPrivatePath). Soluzione: utilizzare un file di configurazione.Aggiungiamo un file di configurazione al nostro progetto. Per automatizzare la build aggiungiamo la seguente direttiva post-build alle proprietà di progetto: copy app.config "$(TargetPath).config" (Chissà perchè vs non lo fa da se)Nel file config aggiungiamo quindi la sezione necessaria per linkare gli assembly: <?xml version="1.0" encoding="utf-8" ?><configuration>  <runtime>    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">      <dependentAssembly>        <assemblyIdentity name="AssemblyName"                           culture="neutral"                           publicKeyToken="ab9f21381c07889c" />        <codeBase version="1.0.0.0"                   href="FILE://c:/Programmi/myAssembly/AssemblyName.dll" />      </dependentAssembly>            </assemblyBinding>  </runtime>        </configuration> Come si vede è necessario indicare anche la publicKeyToken. Per estrarla possiamo fare uso dell'utility sn con il parametro -T. Ok... questo è tutto nel caso in cui l'assembly...

File di Trace in .Net

Ieri mi sono scontrato con il problema di generare un file di trace di un'applicazione. Il mio pensiero è subito volato verso le Enterprise Library, finalmente l'occasione di utilizzare questo gioiello della scienza e della tecnica. Durante il workshop del 2 dicembre (Architecture & Management) ero rimasto affascinato dagli Application Blocks, tanto (giustamente) decantati dal nostro Lorenzo. Dopo l'uscita della versione 1.0 delle EL non vedevo l'ora di avere l'occasione per buttarmici sopra. Ma con il senno di poi mi rendo conto che l'occasione non era questa. Infatti, man mano che approfondivo l'argomento mi rendevo sempre più conto che le EL sono eccezionali, ma nel mio...

Generare l'XSD dato l'XML

In caso di necessità di generare lo schema partendo da un'xml dato: DataSet ds = new DataSet();ds.ReadXml(@"c:\XmlOrigine.xml");ds.WriteXmlSchema(@"c:\Schema.xsd"); Molto banale. Ovviamente utilizzando i soliti memory stream è possibile fare il tutto in memoria senza passare per il file system. powered by IMHO 1.2 with Emoticon Formatter

Microsoft Win32 to Microsoft .NET Framework API Map

Per chi è abituato ad utilizzare le Api segnalo un interessante articolo che mappa le funzioni offerte dalle api alle corrispondenti classi/metodi presenti nel framework (Se esistono). Fonte:Win32 API powered by IMHO 1.2 with Emoticon Formatter

Stampare una pagina html

Come stampare una pagina html senza far apparire la finestra di selezione della stampante? La soluzione che ho adottato comporta l'inclusione dell'activeX di Internet Explorer nel codice (Componente COM Microsoft Web Browser). Altre soluzioni fanno sempre apparire quella dannata printer dialog. Siccome l'html viene generato dinamicamente navigo sull'about:blank: Object n = System.Reflection.Missing.Value;axWebBrowser1.Navigate("about:blank", ref n, ref n, ref n, ref n); Sull'evento NavigateComplete2 vado ad iniettare l'html dentro l'oggetto: private void axWebBrowser1_NavigateComplete2(object sender                    , AxSHDocVw.DWebBrowserEvents2_NavigateComplete2Event e){    object[] psa = {this.Html}; // Variabile Stringa che contiene l'html    mshtml.IHTMLDocument2 hDoc2 = (mshtml.IHTMLDocument2)axWebBrowser1.Document;        hDoc2.clear(); // Pulisco la pagina    hDoc2.write(psa); // Scrivo il contenuto    hDoc2.close(); // Chiudo la pagina} A questo punto chiamo il seguente metodo per stampare la pagina senza richiesta di selezione da parte dell'utente (stampante di default). Il terzo parametro della ExecWB serve per far si che il thread resti in attesa fino a completamento della stampa, in questo modo siamo certi che...

Server COM Singleton... Allarme rientrato

Una dura giornata di lavoro basato su ricerca (grande Google) e test a manetta ha portato i suoi frutti. La soluzione (come sempre) non era poi così difficile come sembrava. Mi ha portato sulla buona strada il post di un blog (Modificando l'esempio riportato si riesce ad ottenere un server com singleton che non sia un servizio). Probabilmente non sarà l'unica soluzione, e forse nemmeno la migliore... ma intanto una soluzione esiste!! Prossimamente seguirà un articolo sul tema (nonostante l'interesse per l'argomento non appaia particolarmente sentito... 40 Web Views e 4 commenti off-topic  alla mia precedente disperata richiesta di aiuto) powered by IMHO...

Server COM Singleton... HELP!!

Ok, cedo. Ho capito come creare un buon server com in C#, eventi compresi. Ma come faccio a fare in modo che il server com sia singleton? Ogni minimo spiraglio di luce è gradito!! powered by IMHO 1.1 with Emoticon Formatter

Full C# Archive

Copyright © Gabriele Gaggi

Design by Bartosz Brzezinski

Design by Phil Haack Based On A Design By Bartosz Brzezinski