C#

C#
XmlReader.Create dietro ad un proxy

Mi capita spesso di dover ripetere sto codice… ecco che me lo appunto: SyndicationFeed feed; WebProxy proxy = new System.Net.WebProxy("xx.xx.xx.xx", 8080); proxy.BypassProxyOnLocal = true; proxy.Credentials = new System.Net.NetworkCredential("nome", "pwd", "dominio");   using (WebClient client = new WebClient { Proxy = proxy }) { using (Stream stream = client.OpenRead(rssUrl)) { using (XmlReader xmlreader = XmlReader.Create(stream)) { ...

posted @ venerdì 11 marzo 2011 17:13 | Feedback (0)

Data type mismatch in criteria expression in MS Access

Oggi sono diventato scemo per fare un inserimento di una data in MS Access… non ho capito bene il problema e se è un baco, ma praticamente se non converto la data evitando che ci siano i millisecondi access si incazza come una bestia… mahh!! public override void Save(OleDbConnection conn) {     string sqlcmd = @"INSERT INTO miatabella (UserName, DteRichiesta) Values (?,?)";     using (OleDbCommand cmd = new OleDbCommand(sqlcmd, conn))     { ...

posted @ domenica 31 gennaio 2010 21:39 | Feedback (0)

Zippare cartelle di grandi dimensioni

Quando si producono zip di grandi dimensioni è facile che la memoria aumenti troppo. Con SharpZipLib è facile evitare di saturare la memoria. Ecco un esempio di codice per zippare una cartella: public static void ZipFilesToDisk(string inputFolderPath, string outputFile, string password) {     ArrayList fileNames = GenerateFileList(inputFolderPath); // generate file list     byte[] buffer = new byte[1024 * 8];     using (ZipOutputStream zipOutput = new ZipOutputStream(File.Create(outputFile)))     {         // set compression level         zipOutput.SetLevel(9);         // set password...

posted @ giovedì 28 gennaio 2010 20:45 | Feedback (0)

Fare un unico EXE: una tecnica interessante.

L’avevo intravista tempo fa utilizzata in un eseguibile che guardavo con reflector, oggi l’ho provata: carina! Quando si fanno degli eseguibili semplici che magari utilizzano un componente esterno (una reference di una dll esterna) si puo’ fare in modo di distribuire un unico exe con embeddate dentro le dll referenziate. Di solito per avere un unico exe utilizzavo il comando IlMerge e le sue varie GUI, con questa tecnica si fa a meno. Facciamo un esempio: mettiamo il caso che il mio programmino faccia uso di SharpZipLib per produrre degli zip. Per fare in modo di distribuire...

posted @ mercoledì 27 gennaio 2010 17:24 | Feedback (1)

Esporre eventi 'visibili' da un servizio Windows

Interessante post che spiega come sviluppare servizi Windows che espongono eventi visibili da applicazioni di utente (su Windows7 e Vista il check 'Allow this service to interact with desktop' non serve) Questo il link al post.

posted @ lunedì 25 gennaio 2010 11:32 | Feedback (0)

Generare codice in VSNET 2008

Avevo già provato in passato il T4 e altri strumenti per generare codice, ma ho sempre installato qualcosa. Oggi ho scoperto (mia ignoranza) che il T4 è già incluso nell’installazione di VSNET 2008… ancora più semplice da utilizzare. Un generatore è utile in molti casi, generazione di SP del DB, di enumerator, di entities, ecc… Per creare un template basta creare un file di testo e rinomarlo in .tt. Una volta salvato verrà generato un file contenente il risultato.   Il template: <#@ template language="C#" #> ...

posted @ venerdì 22 gennaio 2010 03:27 | Feedback (3)

Un TabControl senza tab

A volte torna utile l’utilizzo del controllo Tab senza visualizzare l’header del controllo per fare in modo di visualizzare o nascondere dei controlli. Come indicato su questo post, è possibile crearsi il proprio controllo ereditando dal TabControl e facendo l’override del WndProc: public class CustomTabControl : TabControl {     protected override void WndProc(ref Message m)     {         if (m.Msg == 0x1328 && !DesignMode)            ...

posted @ lunedì 7 dicembre 2009 10:30 | Feedback (0)

GetProcess per utente

Una delle mancanze della classe “Process” è quella di non esporre la proprietà “Owner”, per cui risulta difficile ottenere una lista dei processi di un utente. Nel caso di Terminal-Service, o di FastUser-Switch se si chiede una lista dei processi attivi si ottengono anche quelli degli altri utenti collegati. Per risolvere il problema il metodo migliore che ho trovato è quello di ricorrere a WMI (per cui occhio alle prestazioni) Ecco un esempio: public class MyProcess : Process { public static List<Process> GetMyProcessesByName(string procName) { ...

posted @ martedì 1 dicembre 2009 02:44 | Feedback (0)

Eliminare nodi da un file XML con LINQ

Piccolo tip per eliminare velocemente dei nodi da un file XML: private static void AdjustXml(string pathFile) { XDocument doc = XDocument.Load(pathFile); XNamespace ns = "http://mioshema"; var q = from node in doc.Descendants(ns+"NomeNodo") select node; q.ToList().ForEach(x => x.Remove()); doc.Save(pathFile + ".xml"); }

posted @ lunedì 30 novembre 2009 23:10 | Feedback (0)

Spell-Check e sinonimi italiano in C#

Grazie a NHunspell e ai dizionari di OpenOffice è facile dotare le nostre applicazioni di funzionalità di spell-check (controllo esattezza parole) e sinonimi. Dopo aver letto questo articolo e avendo visto che esistono i dizionari in italiano, ho fatto un po di prove rimanendo sorpreso dalla facilità di implementazione. E’ possibile controllare l’esattezza delle parole: … e controllare significato e sinonimi: A questo link potrete trovare i dizionari in italiano, mentre a questo link il mio progetto di esempio:

posted @ sabato 21 novembre 2009 01:22 | Feedback (0)

I am really frustrated with SQL Azure

Dopo vari tentativi mi sento allo stesso modo del tizio che nei forum scrive “I am really frustrated with SQL Azure” (tra l’altro se cercate “connect sql management” troverete un sacco di gente che ha sto problema…”) Morale della favola: non riesco a connettermi con uno strumento umano come Sql Management o Visual Studio, le ho provate tutte ma riesco solo con  il tool sqlcmd. Per connettermi con l’sqlcmd: sqlcmd  -S tcp:****.database.windows.net -U Babbawg@**** -P miapassword -d nomedatabase Esempio di utilizzo: CREATE TABLE TabNames(cod int NOT NULL,...

posted @ martedì 20 ottobre 2009 00:46 | Feedback (2)

Enum to List

Con questo snippet inauguro una nuova categoria per “ritrovare” gli esempi di codice che mi piacciono e che non voglio perdere: 1: public static List<T> EnumToList<T>() 2: { 3: Type enumType = typeof (T); 4:  5: // Can't use type constraints on value types, so have to do check like this ...

posted @ mercoledì 30 settembre 2009 19:48 | Feedback (1)

Effetto calamita in stile skype per WinForm

Prendendo spunto da un articolo trovato in rete, ecco come ottenere l’effetto calamita che utilizza Skype (provate ad avvicinare la finestra di skype ad un bordo, quando sarete nei pressi questa si ‘aggancia’): private void Form1_LocationChanged(object sender, EventArgs e) { int minMargin = 25; if (this.Left < minMargin) this.Left = 0; else if (this.Right > (Screen.PrimaryScreen.Bounds.Width - minMargin)) this.Left = Screen.PrimaryScreen.Bounds.Width - this.Width; if (this.Top < minMargin) ...

posted @ mercoledì 19 agosto 2009 20:35 | Feedback (0)

Lanciare un processo nascosto e leggerne l’output.

Esempio di lettura dell’output di Process lanciato in modalità nascosta utile per leggere ad esempio un “Ipconfig” o un nostro eseguibile. 1: private void ReadProcess() 2: { 3: ProcessStartInfo psInfo = new ProcessStartInfo(@"MyProcess.exe"); 4:   5: psInfo.RedirectStandardOutput = true; 6: psInfo.RedirectStandardError = true; 7: psInfo.UseShellExecute...

posted @ venerdì 24 luglio 2009 09:03 | Feedback (0)

I’m running on a Virtual Machine?

Vorrei da codice managed scoprire se il mio programma gira su una Virtual Machine. Purtroppo fino ad ora ho trovato solo questo che funziona solo su Virtual PC: 1: private bool IsRunningOnVM() 2: { 3: string manufacturer = ""; 4:   ...

posted @ venerdì 26 giugno 2009 19:30 | Feedback (2)

Clipboard Tips (c#)

Leggere i possibili formati di lettura in clipboard: private string GetFormatsInClipboard() {     StringBuilder sb = new StringBuilder();     IDataObject dataClipboard = Clipboard.GetDataObject(); ...

posted @ venerdì 8 maggio 2009 18:58 | Feedback (0)

Sono a 64bit?

Dalle mie indagini non c’è una classe .Net per determinare se si è su un SO a 64bit… possibile?? Girando sui vari forum ho trovato queste tre alternative (ma solo 2 mi rispondono che sono a 64 sul mio Vista x64 con sp2 appena fatto…)   Metodo 1: IntPtr 1: public static bool Is64BitSimple() 2: { 3: if (IntPtr.Size == 8) 4: ...

posted @ mercoledì 4 marzo 2009 23:45 | Feedback (4)

ScreenCasts interessanti

Segnalo questi screencast interessanti legati prevalentemente a WCF.

posted @ martedì 23 dicembre 2008 00:08 | Feedback (0)

Utilizzare i WebServices di Virtual Earth

Dopo un po di vicissitudini sono riuscito finalmente a provare un po i webservices di Virtual Earth all'interno di una mia windows form. La documentazione è abbastanza esauriente, ma io un po di casino sono riuscito a farlo ugualmente :).... il problema è attivare un account di test e configurare l'ambiente. Ecco i passi che ho seguito: con il mio account live mi sono attivato un "Developer account" a questo indirizzo. dopo aver attivato l'account (vi verrà inviata una mail di attivazione) bisogna testare se è tutto...

posted @ domenica 5 ottobre 2008 00:53 | Feedback (1)

TaskDialog

Interessante dll con sorgenti per evolvere le ns. classiche Messagebox. Lo trovate a questo indirizzo.

posted @ giovedì 3 luglio 2008 10:32 | Feedback (0)

WMI Code Creator tool

Tool gratuito di Microsoft che ci aiuta con WMI. Clicca qui per scaricare.

posted @ giovedì 26 giugno 2008 13:36 | Feedback (0)

Timestamp server URL

Dato che tutte le sante volte che devo usarlo perdo 10 minuti a cercarlo eccolo che me lo appunto e magari torna utile anche a voi: http://timestamp.verisign.com/scripts/timestamp.dll

posted @ lunedì 9 giugno 2008 13:50 | Feedback (1)

101 Esempi query LINQ

In questa pagina sono riassunti un sacco di esempi di query LINQ. Interessanti anche un esempio di paginazione fatta da Brunetti e una carrellata di distinct su questo blog. Per provarli esiste questo LINQPad molto comodo e ben fatto.

posted @ mercoledì 23 aprile 2008 00:45 | Feedback (0)

Odinare numeri pari e dispari con LINQ

Bellissimo post di Pietro Brambati che mi appunto per non dimenticarmene. Il problema che risolve 1 riga di codice è: "data una lista di numeri pari e dispari non in ordine come si separano i numeri pari da quelli dispari ?" List<int> elenco = new List<int> { 1,7,9, 2, 3, 4, 3, 4, 2, 3, 4, 5, 2, 0, 9 }; var pariEdispari = elenco.OrderBy(s => s % 2 != 0); var pariEdispariOrdinati = elenco.OrderBy(s => s % 2 != 0).ThenBy(s => s); foreach (var item in pariEdispariOrdinati) { Console.WriteLine(item); } ... che dire C# evolve...

posted @ giovedì 17 aprile 2008 03:06 | Feedback (0)

FastSharp, testare al volo un metodo

Mi capita spesso di dover provare due righe di codice "al volo": cosa fare? Apri visual studio, crea un progettino console, scrivi il codice da testare... Con questo eseguibile si fa tutto in 2 secondi: 1) non si installa 2) si scrive e si esegue   Esiste sia per il framework 3.5 che 2.0. La limitazione è che non si possono ovviamente scrivere classi ecc... serve solo per testare quello che scrivereste dentro un metodo. Ecco il link.... e lo inserisco tra i miei tools.

posted @ sabato 29 marzo 2008 23:28 | Feedback (2)

Se è potente WPF

Mi è stato chiesto da un grafico se in windows form si riusciva a fare una splash screen un po particolare: in pratica era un rettangolo in trasparenza con ombra, con sopra del testo non opacizzato... + altre cosucce (tipico da richiesta dei grafici: questo si può fare?... questo si può mettere?...) Ci ho provato ed in windows forms non è possibile (magari lo è ma non è così semplice come farlo in wpf) Ecco il codice d'esempio: 1 <Window x:Class="Splash.Window1" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" ...

posted @ venerdì 28 marzo 2008 01:56 | Feedback (0)

Un TreeView WPF molto interessante

Interessante treeview che carica i nodi in thread separati per non bloccare l'intefaccia utente... quando posso me lo studierò per bene. Articolo e codice d'esempio a questo indirizzo.

posted @ giovedì 27 marzo 2008 01:00 | Feedback (0)

Query XPath con namespace

Mi capita alle volte di fare query xpath e di non veder restituito nulla... capita quando ci sono i namespaces di mezzo :) ...e tutte le volte me ne dimentico!!! Posto un esempio che ho appena fatto per poter settare a "False" tutti i CopyLocal="True" di un progetto di Visual Studio.NET 1 private void ProcessProj(string file) 2 { 3 XmlDocument doc = new XmlDocument(); 4 doc.Load(file); 5 6 bool isChanged = false; 7 8 //...

posted @ giovedì 6 marzo 2008 01:33 | Feedback (1)

Impariamo ad usare System.AddIn del 3.5

Nel progettino che sto iniziando a realizzare voglio provare ad utilizzare le nuove classi del framework 3.5 che permettono di realizzare soluzioni a plugins. Per chi volesse iniziare come me da 0 ecco alcuni link dai quali partire: guide "passo a passo": How To: Build an Add-In using System.AddIn Everything you need to know to get started with System.AddIn MSDN Blog del team Samples e altro su CodePlex

posted @ sabato 9 febbraio 2008 15:00 | Feedback (2)

Associare il proprio programma ad una estensione

Normalmente è una operazione che si fa in fase di installazione, e già il progetto di setup di VSNET consente di farlo, ma ora voglio provarlo a fare da codice: creare una mia estensione, associargli un mio programma e la relativa icona. Tutto sta nello scrivere le corrette chiavi di registro: // registro l'estensione Registry.ClassesRoot.CreateSubKey(".babba").SetValue( "", Application.ProductName, Microsoft.Win32.RegistryValueKind.String); // programma ed icona predefiniti Registry.ClassesRoot.CreateSubKey(Application.ProductName + "\\shell\\open\\command").SetValue("", "\"" + Application.ExecutablePath + "\" \"%1\"", Microsoft.Win32.RegistryValueKind.String); Registry.ClassesRoot.CreateSubKey(Application.ProductName + "\\DefaultIcon").SetValue("", Application.ExecutablePath + ",0", Microsoft.Win32.RegistryValueKind.String); Adesso tutti i files...

posted @ domenica 3 febbraio 2008 19:52 | Feedback (0)

Tempi validazione XML con XMLReader

Leggendo i tempi che ha misurato sto tizio, mi sono chiesto quale possa essere il peso della validazione dell'xml rispetto ad uno schema dato. Ecco i risultati che ho ottenuto considerando i files: FileSmall: 60 Kb. FileBig: 15.320 Kb. Entrambi i files non hanno errori di validazione. Che dire... se non ho sbagliato qualcosa, questo dovrebbe essere il metodo piu' veloce per validare un xml, 21 secondi per validare il file da 15 mega mi sembrano tanti, ma forse nemmeno troppi... in fondo è un...

posted @ domenica 3 febbraio 2008 02:32 | Feedback (3)

Un CMD per lanciare il WebServer lite (framework 3.5)

Dopo aver installato il VS2008 con il framework 3.5 mi sono accorto che quanto scritto in questo mio post non andava... Ecco la correzione: @echo off setlocal rem ----- path del WebDev ------ rem -> XP (o con framework 2.0)-- rem set WEBSERVER_PATH="%WINDIR%\Microsoft.NET\Framework\v2.0.50727\WebDev.Webserver.exe" rem -> VISTA (o cmq dopo installazione 3.5)-- set WEBSERVER_PATH="%COMMONPROGRAMFILES%\microsoft shared\DevServer\9.0\WebDev.Webserver.exe" rem ----- variabili da cambiare ------ set PORT_NUMBER=5555 set VIRTUAL_PATH=/Babba set PHYSICAL_PATH=%USERPROFILE%\MioSito rem ----- stampo a video url ------ echo. echo WebServer locale avviato... echo. echo http://localhost:%PORT_NUMBER%%VIRTUAL_PATH% rem ----- avvia il server web ------ %WEBSERVER_PATH% /port:%PORT_NUMBER% /path:%PHYSICAL_PATH% /vpath:%VIRTUAL_PATH% Bye bye!

posted @ martedì 8 gennaio 2008 01:24 | Feedback (0)

Validazione email con regular expression

Lo so, ce ne sono un sacco, ma mi segno questo in quanto l'autore promette che è il migliore che ci sia rispetto a tanti in giro... Il codice è su Codeproject a questo indirizzo. using System.Text.RegularExpressions; public static class TestEmail { public const string MatchEmailPattern = @"^(([a-zA-Z0-9]+[\w-]*\.)*([a-zA-Z]{1}[\w-]*|[\w-]{2,}))@" + @"((([0-1]?[0-9]{1,2}|2{1}[0-5]{2})\.([0-1]?[0-9]{1,2}|2{1}[0-5]{2})\.([0-1]?[0-9]{1,2}|2{1}[0-5]{2})\.){1}|" + @"(([a-zA-Z]+[\w-]*\.)+))([a-zA-Z]{2,4}|([0-1]?[0-9]{1,2}|2{1}[0-5]{2}))$"; public static bool IsEmail(string email) { if (email != null) return Regex.IsMatch(email, MatchEmailPattern); else return false; } }

posted @ lunedì 7 gennaio 2008 08:48 | Feedback (0)

Suggerimenti per spedire Email

Dato che programmo poco in Asp.Net, quando ho a che fare con spedizione delle email mi trovo sempre impreparato... Ecco un ottimo sito che segnalo: http://www.systemnetmail.com/

posted @ sabato 29 dicembre 2007 02:28 | Feedback (0)

Nuovi video tutorial su VS2008

Segnalo la disponibilità di nuovi video introduttivi a VS2008 e framework 3.5 a questi indirizzi; http://windowsclient.net/learn/videos_linq.aspx http://windowsclient.net/learn/videos_orcas.aspx Per chi non ne avesse abbastanza, ci sono ovviamente anche quelli della serie "How do I?" di Microsoft.... buona visione!

posted @ sabato 24 novembre 2007 09:54 | Feedback (0)