ads

Diminuire l’effetto flickering aumentando le prestazioni in GDI+

Marzo 12th, 2009 2 Comments   Posted in Programmazione

Quando si iniziare ad utilizzare GDI+ nel .NET Framework il primo problema da affrontare è il così detto effetto flickering. Il flickering è quel fastidioso sfarfallio che vediamo quando disegniamo un oggetto in GDI+, come un rettangolo o un cerchio.

Esistono numerosi trucchetti per togliere, almeno parzialmente, questo problema e contemporaneamente aumentare le prestazioni grafiche. Il primo consiglio è quello di impostare la proprietà DoubleBuffer della Windows Form a True. Anche se il consumo di memoria aumenterà le prestazioni ne beneficeranno. Inoltre è bene impostare altre proprietà interessanti. Possiamo fare tutto in un colpo solo impostando un’insieme di stili nel costruttore della windows form. In questo modo:

   1: public Form1()
   2: {
   3:     this.InitializeComponent();
   4:
   5:     this.SetStyle(ControlStyles.UserPaint, true);
   6:     this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
   7:     this.SetStyle(ControlStyles.DoubleBuffer, true);
   8:     this.SetStyle(ControlStyles.ResizeRedraw, true);
   9:     this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
  10:     this.UpdateStyles();
  11: }

Questo sistema dovrebbe bastare per ridurre notevolmente il flickering. Ma se volete spingere al massimo le prestazioni c’è ancora una cosa che si può fare: utilizzare un’immagine bitmap come buffer ulteriore. In questo modo gli oggetti vengono prima disegnati sulla bitmap di buffer e successivamente la bitmap viene a sua volta renderizzata sulla form. In questo modo:

   1: private void Form1_Paint(object sender, PaintEventArgs e)
   2: {
   3:     // Creo una bitmap in memoria.
   4:     Bitmap buffer = new Bitmap(this.Width, this.Height);
   5:
   6:     // Utilizzo l'oggetto Graphics della bitmap
   7:     // e disegno tutti i miei oggetti.
   8:     using (Graphics graphics = Graphics.FromImage(buffer))
   9:     {
  10:         // disegno tutti i miei oggetti.
  11:     }
  12:
  13:     // Pulisco la superficie della form e disegno
  14:     // l'immagine che ho in memoria.
  15:     e.Graphics.Clear(this.BackColor);
  16:     e.Graphics.DrawImage(buffer, 0, 0, buffer.Width, buffer.Height);
  17: }

Le prestazioni sono garantite. 🙂

Ti piace questo articolo? Condividilo:

Continuous Integration con CruiseControl.net – Introduzione

Marzo 6th, 2009 4 Comments   Posted in In rilievo, Programmazione

Con questo primo articolo iniziamo una serie di incontri sul Continuous Integration. In particolare, dopo una prima panoramica sui concetti base, entreremo nel vivo con dettagli tecnici dedicati alla messa in opera di un sistema di Continuous Integration con CruiseControl.net su piattaforma Microsoft .Net Framework. More »

Ti piace questo articolo? Condividilo:

MSBuild e i problemi con i Report Project

Giugno 5th, 2007 No Comments   Posted in Programmazione

MSBuild è un comodo tool fornito con l’SDK del .NET Framework che permette la compilazione del nostro progetto a linea di comando, passandogli come parametro di input il nome del file solution di Visual Studio. Un piccolo esempio:

msbuild.exe Progetto.sln /T:rebuild /p:Configuration=DEBUG

Ebbene. Se nella nostra solution sono presenti uno o più progetti Report Project, per la creazione di report con Reporting Services, MSBuild fallirà la compilazione con il seguente messaggio:

ProgettoReport.rptproj(2,1): error MSB4041:

The default XML namespace of the project must be the MSBuild XML namespace.
If the project is authored in the MSBuild 2003 format,
please add xmlns="http://schemas.microsoft.com/developer/msbuild/2003" to the
 element.If the project has been authored in the old 1.0 or 1.2 format,
please convert it to MSBuild 2003 format.

Per correggere questo problema potrebbe essere sufficiente deselezionare tutti i progetti Report Project nel ConfigurationManager della solution, sia per la modalità DEBUG che per la modalità RELEASE. Questa non è però una soluzione definitiva in quanto alcuni messaggi di errore potrebbero rimanere segnalando un problema di compilazione. A quanto pare il problema non verrà risolto fino alla prossima versione di Visual Studio.
Una soluzione alternativa, e sicuramente funzionante, consiste nel separare la solution in due, da una parte i progetti con i sorgenti del nostro programma e dell’altra una solution dedicata ai progetti Report Project.

Tags: ,

Ti piace questo articolo? Condividilo:

Problemi con l’intellisense di Visual Studio e ConfigurationManager

Giugno 4th, 2007 No Comments   Posted in Programmazione

Con l’introduzione del .NET Framework 2.0 la classe ConfigurationSettings, utile per la lettura del file App.Config, è stata sostituita dalla nuova classe ConfigurationManager. Analogamente a ConfigurationSettings, la nuova classe ConfigurationManager è una classe static che permette l’accesso in sola lettura dei file di configurazione delle applicazioni client. In questo modo:

string value = ConfigurationManager.AppSettings[key];

Tuttavia con Visual Studio 2005 potreste incontrare un problema di riconoscimento delle nuove classi con l’intellisense. Il problema nasce poiché Visual Studio non riconosce correttamente la versione del file System.Configuration. Il risultato è un intellisense che mostra l’elenco delle classi e delle funzioni della versione 1.1 del .NET Framework:

Intellisense e ConfigurationManager

Per risolvere questo problema basta referenziare la dll System.Configuration v2.0 semplicemente facendo Add Reference > System.Configuration.dll per tutti i progetti che necessitano il riconoscimento della nuova classe.

Riferimenti
http://aspadvice.com/blogs/ssmith/archive/2005/08/26/1912.asp
ConfigurationManager su MSDN

Tags: , ,

Ti piace questo articolo? Condividilo:

Localizzare il controllo Microsoft ReportViewer

Maggio 29th, 2007 2 Comments   Posted in Programmazione

In questo periodo mi sto concentrando sulla generazione e visualizzazione di report con Microsoft SQL Server 2005 Reporting Services. In particolare per la visualizzazione dei report in applicazioni winform e web è disponibile un controllo chiamato Microsoft ReportViewer disponibile con Microsoft Visual Studio 2005.

Per default il controllo si presenta con etichette e label in inglese. Un bel problema se la nostra applicazione è in italiano. Per ovviare a questo inconveniente è sufficiente scaricare il Microsoft ReportViewer Language Pack, dopo aver installato il Microsoft Report Viewer Redistributable 2005, installare e scrivere le seguenti righe di codice all’interno della nostra applicazione.

Thread.CurrentThread.CurrentCulture = new CultureInfo("it-IT");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("it-IT");

CodeProject.com suggerisce un metodo alternativo, e che francamente non mi soddisfa, che consiste nel nascondere totalmente la toolbar nativa del controllo e re-implementarla da zero. A voi la scelta.

Riferimenti:
Microsoft Report Viewer Redistributable 2005
Microsoft Report Viewer 2005 Language Pack
A Workaround to Customizing and Localizing the Microsoft ReportViewer .NET Toolbar
Installing and Localizing the Visual Studio 2005 Report Viewer Controls

Technorati Tags: , ,

Ti piace questo articolo? Condividilo: