C#
C#
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))
{
...
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)) { ...
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...
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...
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.
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#" #> ...
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) ...
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)
{
...
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");
}
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:
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,...
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
...
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)
...
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...
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:
...
Leggere i possibili formati di lettura in clipboard: private string GetFormatsInClipboard() { StringBuilder sb = new StringBuilder(); IDataObject dataClipboard = Clipboard.GetDataObject(); ...
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: ...
Segnalo questi screencast interessanti legati prevalentemente a WCF.
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...
Interessante dll con sorgenti per evolvere le ns. classiche Messagebox. Lo trovate a questo indirizzo.
Tool gratuito di Microsoft che ci aiuta con WMI.
Clicca qui per scaricare.
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
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.
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...
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.
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"
...
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.
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 //...
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
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...
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...
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!
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;
}
}
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/
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!