title: Data context multipli.

text:
Giulio Petrucci wrote:
>  1. usi un O/RM? EntityFramework presumo, giusto?
1) No. Di conseguenza...
Tieni presente che sto facendo lo studente, e visto che da studente la
pratica fa bene quanto la teoria, e avendo un'applicaziella interna che
sto sviluppanso su cui sperimentare, sto sperimentando.
Finora, come scrivevo, sempre impiegato roba fatta da me a manina
(
ADO.NET
 puro).
> 2. devi solo fare una migrazione di dati da RDBMS1 a RDBMS2 oppure la
> tua applicazione deve gestire contemporaneamente dati provenienti da
> entrambi i db?
Per il momento la faccio semplice: acquisisco dati da 1, deposito in 2
dopo una semplice normalizzazione e uso 2 per tutto il resto
(elaborazione, verifica e presentazione.
> Nella seconda eventualit�: hai anche il caso "estremo"
> in cui le property di una singola entit� provengano da due db
> diversi?  (esempio: un impiegato ha nome e cognome sul dbA mentre i
> numeri di telefono sul dbB)
No. Io sono sostanzialmente contrario alla distribuzione su pi� DB. Per
quanto orrido sia, ho sempre preferito, per le mie applicazioni,
mettere a monte meccanismi di copia dei dati in modo da trovarmi tutto
gi� pronto da mangiare.
Va anche detto che normalmente il mio dominio applicativo me lo
permette. Non pratico il settore gestionale o il web servicing, per cui
non devo affrontare flotte di utenti che vogliono accedere
contemporaneamente alla mia povera base dati...
Comuqne, mi hai dato un'altro spunto di studio, e di cio' ti ringrazio.
--
Ciao!
Luca


title: Data context multipli.

author: Giulio Petrucci

text:
Ciao Luca,
On 11/11/2010 8:54 PM, Luca Menegotto wrote:
> Tieni presente che sto facendo lo studente, e visto che da studente la
> pratica fa bene quanto la teoria, e avendo un'applicaziella interna che
> sto sviluppanso su cui sperimentare, sto sperimentando.
>
> Finora, come scrivevo, sempre impiegato roba fatta da me a manina
> (
ADO.NET
 puro).
Capisco. L'ho fatto anche io e lo reputo un ottimo esercizio per entrare
"dentro" certe problematiche. Poi però... NHibernate ti fa "svoltare"
perché smetti di scrivere i data mapper a mano e i tempi di sviluppo
dell'accesso ai dati si abbattono. :-)
Domanda: hai mai avuto modo di leggere il libro "Microsoft .NET:
Architecting Applications for the Enterprise"? Il sesto capitolo (mi
pare) è sull'accesso ai dati: è decisamente valido.
> Per il momento la faccio semplice: acquisisco dati da 1, deposito in 2
> dopo una semplice normalizzazione e uso 2 per tutto il resto
> (elaborazione, verifica e presentazione.
Cioè: stai eseguendo una migrazione? Nel senso, il db1 verrà ancora
usato dopo che il db2 è in produzione oppure verrà gettato nel dimenticatio?
> No. Io sono sostanzialmente contrario alla distribuzione su più DB.
Anche io. Ma la situazione in cui hai tutto su un db che magari hai
progettato tu io la chiamo "Mulino Bianco Programming" (o "Hapy Family"
nella versione internazionale). La realtà è tremendamente più incasinata
(almeno per il mio ultimo anno lavorativo).
> Per
> quanto orrido sia, ho sempre preferito, per le mie applicazioni,
> mettere a monte meccanismi di copia dei dati in modo da trovarmi tutto
> già pronto da mangiare.
In questi casi c'è un problema *enorme* che è quello della
sincronizzazione dei dati. Io sto lavorando a una architettura che mi
sta togliendo la salute per gestire un problema del genere. Se vuoi
possiamo "confrontarci" sul problema.
> Va anche detto che normalmente il mio dominio applicativo me lo
> permette.
Buon per te! :-P
Di cosa ti occupi?
> Non pratico il settore gestionale o il web servicing, per cui
> non devo affrontare flotte di utenti che vogliono accedere
> contemporaneamente alla mia povera base dati...
Nemmeno io. Però mi può capitare di avere problemi di scalabilità e di
carico.
Sono scenari interessanti.
> Comuqne, mi hai dato un'altro spunto di studio, e di cio' ti ringrazio.
Be'... per tanto poco? ;-)
Ciao,
Giulio
--


title: Data context multipli.

author: Luca Menegotto

text:
Giulio Petrucci wrote:
> Domanda: hai mai avuto modo di leggere il libro "Microsoft .NET:
> Architecting Applications for the Enterprise"? Il sesto capitolo (mi
> pare) � sull'accesso ai dati: � decisamente valido.
No. E anzi, grazie per lo spunto, metto in coda. Ormai ho una torre di
libri da leggere e poco tempo per leggerli (mannaggia).
> > Per il momento la faccio semplice: acquisisco dati da 1, deposito
> > in 2 dopo una semplice normalizzazione e uso 2 per tutto il resto
> > (elaborazione, verifica e presentazione.
>
> Cio�: stai eseguendo una migrazione? Nel senso, il db1 verr� ancora
> usato dopo che il db2 � in produzione oppure verr� gettato nel
> dimenticatio?
No. L'idea e' questa.
Ho un database centralizzato che acquisisce una serie di dati. Sono
cose generiche, per cui il database di origine potrebbe cambiare, nel
tempo e nella probabilit� che possa dover impiegare la mia applicazione
in altre situazioni (si sa mai).
Allora, mi fa comodo avere:
- accesso al database generale, dove NON DEVO mettere le mani, per
scaricarmi la roba che mi interessa, una volta normalizzata;
- accesso al database locale, per l'elaborazione dei dati grezzi e la
storicizzazione degli stessi una volta che questi sono elaborati.
SQL Server di cui parlo e' centralizzato su un altro server, e ci ho
preparato sopra il mio bel DB destinazione, ma il tutto e' pensato
anche perche' un tale in azienda attacchi il suo bel portatile, si
scarichi quel che serve e poi possa anche lavorare i dati a casa.
> Family" nella versione internazionale). La realt� � tremendamente pi�
> incasinata (almeno per il mio ultimo anno lavorativo).
Condivido. E talvolta penso di essere fortunato a affrontare altri
problemi e non questi... ;-)
> In questi casi c'� un problema enorme che � quello della
> sincronizzazione dei dati. Io sto lavorando a una architettura che mi
> sta togliendo la salute per gestire un problema del genere. Se vuoi
> possiamo "confrontarci" sul problema.
Confesso, se avessi avuto problemi di sincronizzazione real-time avrei
perso il sonno pure io. La mia fortuna e' che la sincronizzazione
mediamente � monodirezionale e la variazione riguarda un numero
abbastanza ridotto di dati al giorno (parliamo di qualche centinaio di
records).
> > Va anche detto che normalmente il mio dominio applicativo me lo
> > permette.
>
> Buon per te! :-P
> Di cosa ti occupi?
Io mi occupo principalmente di sistemi di supervisione per impianto.
Sia di plug-in per SCADA che di supervisori completi. Per fortuna, a
tutt'oggi i vari colossi a partire da Siemens hanno politiche di prezzo
che, per certi numeri, giustificano che un'azienda pensi di svilupparsi
roba in casa, soprattutto con gli strumenti attuali che consentono
interessanti ottimizzazioni.
Giusto a luglio ho ultimato una libreria che si occupa di gestire
comunicazioni Modbus/TCP (una cosa splendida) con la possiblita' di
parametrizzazione delle variabili, capacita' di gestione allarmi e data
logging e con alcuni controlli (per il momento solo WinForms) gi�
impiegabili e collegabili. Insomma, sono a meta' strada per realizzare
uno SCADA... ;-)
> Nemmeno io. Per� mi pu� capitare di avere problemi di scalabilit� e
> di carico.
> Sono scenari interessanti.
Condivido. Una delle cose che mi manca, da parecchi anni, e' il lavoro
in team per risolvere problemi grossi (con un breve intervallo l'altro
anno, ho partecipato a un team di sviluppo per 8 mesi). Che vuoi, si
diventa vecchi... ;-)
--
Ciao!
Luca


title: Data context multipli.

text:
Ciao Luca,
On 11/12/2010 12:02 PM, Luca Menegotto wrote:
> No. E anzi, grazie per lo spunto, metto in coda. Ormai ho una torre di
> libri da leggere e poco tempo per leggerli (mannaggia).
E' molto interessante, soprattutto se sviluppi applicazioni "Enterprise"
(tipico esempio di parola che nessuno sa cosa significi, ma se la usi
tutti capiscono di cosa parli).
> Ho un database centralizzato che acquisisce una serie di dati. Sono
> cose generiche, per cui il database di origine potrebbe cambiare, nel
> tempo e nella probabilità che possa dover impiegare la mia applicazione
> in altre situazioni (si sa mai).
>
> Allora, mi fa comodo avere:
>
> - accesso al database generale, dove NON DEVO mettere le mani, per
> scaricarmi la roba che mi interessa, una volta normalizzata;
> - accesso al database locale, per l'elaborazione dei dati grezzi e la
> storicizzazione degli stessi una volta che questi sono elaborati.
>
> SQL Server di cui parlo e' centralizzato su un altro server, e ci ho
> preparato sopra il mio bel DB destinazione, ma il tutto e' pensato
> anche perche' un tale in azienda attacchi il suo bel portatile, si
> scarichi quel che serve e poi possa anche lavorare i dati a casa.
Uhm... tutto questo ha senso perché - se no ho capito male - i dati
"passati" non cambiano. Nel senso: i dati che sono sul db "generale" non
cambieranno (se non in casi eccezionali) una volta salvati, giusto? Nel
mio caso, invece, i dati potevano cambiare (esempio: il numero di
telefono di un cliente).
> Io mi occupo principalmente di sistemi di supervisione per impianto.
> Sia di plug-in per SCADA che di supervisori completi. Per fortuna, a
> tutt'oggi i vari colossi a partire da Siemens hanno politiche di prezzo
> che, per certi numeri, giustificano che un'azienda pensi di svilupparsi
> roba in casa, soprattutto con gli strumenti attuali che consentono
> interessanti ottimizzazioni.
Fantastico. Davvero un bell'ambito!
Ma lavori in una azienda che sviluppa sw per un'altra azienda, o proprio
per l'azienda "finale"?
Ciao,
Giulio
--


title: Data context multipli.

text:
Giulio Petrucci wrote:
> Ma lavori in una azienda che sviluppa sw per un'altra azienda, o
> proprio per l'azienda "finale"?
Faccio il libero professionista. E, in questo ambito principale, il mio
cliente e' l'azienda finale.
--
Ciao!
Luca


title: indexer problema

author: GennarinOSpion

text:
ciao,

in fase di studio del linguaggio, sono arrivato agli indexers..., se
provo ad aggiungere un oggetto alla lista contenuta in una classe
utilizzando :

dal form -->

             //classe che contiene List<>
             ListaP lp = new ListaP();

             //oggetto che voglio memorizzare nella lista
             MioOggetto p = new MioOggetto(codice, descrizione, prezzo);

             //uso l'indexer definito nella classe ListaP
             lp[0] = p;

-->

         //definizione indexer
         public MioOggetto this[int index]
         {
             get
             {
                 return lista[index];
             }
             set
             {
                 lista[index] = value;
             }
         }

ottengo un errore (index non compreso nell'intervallo), se invece
aggiungo in un altra via l'oggetto alla lista, ed utilizzo l'indexer
stavolta per leggere l'oggetto dalla lista, allora tutto funziona.

Dove sbaglio?

grazie


title: indexer problema

author: Mauro Servienti [MVP]

text:
Ciao GennarinOSpion,

You wrote on 27/10/2011 :
> ottengo un errore (index non compreso nell'intervallo), se invece aggiungo in
> un altra via l'oggetto alla lista, ed utilizzo l'indexer stavolta per leggere
> l'oggetto dalla lista, allora tutto funziona.
>
> Dove sbaglio?

che non funziona cosï¿œ :-)
Se usi l'indexer "la posizione" deve esistere, una "list" ï¿œ un
contenitore dinamico, quindi se non c'ï¿œ nessun elemento la posizione 1
(indice 0) non esiste, allo stesso modo se ci sono 6 elementi non puoi
inserire qualcosa all'indice 20.

.m

--
Mauro Servienti
{C67C0157-5D98-4733-A75E-93CAEE4BADC8}
Microsoft MVP - Visual C# / MCTS
http://mvp.support.microsoft.com/profile/mauro

blog @
http://milestone.topics.it

whynot [ at ] topics [ dot ] it


title: indexer problema

text:
Il 27/10/2011 21:49, Mauro Servienti [MVP] ha scritto:
> Ciao GennarinOSpion,
>
> You wrote on 27/10/2011 :
>> ottengo un errore (index non compreso nell'intervallo), se invece
>> aggiungo in un altra via l'oggetto alla lista, ed utilizzo l'indexer
>> stavolta per leggere l'oggetto dalla lista, allora tutto funziona.
>>
>> Dove sbaglio?
>
> che non funziona cosï¿œ :-)
> Se usi l'indexer "la posizione" deve esistere, una "list" ï¿œ un
> contenitore dinamico, quindi se non c'ï¿œ nessun elemento la posizione 1
> (indice 0) non esiste, allo stesso modo se ci sono 6 elementi non puoi
> inserire qualcosa all'indice 20.
>
> .m
>

Salve,

quindi l'indexer ï¿œ una 'via rapida' per operare su posizioni che gia
contengono degli elementi?

es. la lista viene riempita di oggetti presi da un file, o un db, o
inseriti tramite un comune metodo, e poi ecco che posso utilizzare
questo strumento?

grazie


title: indexer problema

text:

yep :-)



title: indexer problema

text:
Il 27/10/2011 22:37, Mauro Servienti [MVP] ha scritto:
> Ciao GennarinOSpion,
>
> You wrote on 27/10/2011 :
>> quindi l'indexer ï¿œ una 'via rapida' per operare su posizioni che gia
>> contengono degli elementi?
>>
>> es. la lista viene riempita di oggetti presi da un file, o un db, o
>> inseriti tramite un comune metodo, e poi ecco che posso utilizzare
>> questo strumento?
>
> yep :-)
>
> .m
>

grazie !!!!! :)

Posso andare avanti nello studio....


title: [OT] Re: Presentazione

author: Raffaele Rialdi [MVP]

text:
Mario De Ghetto [MVP] wrote:
> Buongiorno a tutti.
> Ho appena visto che è stato creato questo nuovo ng ... strano che non ci sia
> almeno un messaggio e/o il manifesto.
> Attendo che i promotori del newsgroup si facciano sentire e che indichino la
> "linea" di questo ng ...
> Saluti a tutti!
I "veri" programmatori vivono di notte ... e tu chiedi il manifest alle
6:37? :D:D:D
--
Raffaele Rialdi
http://www.iamraf.net
Weblog:
http://blogs.ugidotnet.org/raffaele
Microsoft MVP profile
https://mvp.support.microsoft.com/profile/raffaele
UGIdotNET -
http://www.ugidotnet.org/


title: [OT] Re: Presentazione

text:
Ciao Mario,
You wrote on 18/10/2010 :
> Ho appena visto che è stato creato questo nuovo ng ... strano che non ci sia
> almeno un messaggio e/o il manifesto.
> Attendo che i promotori del newsgroup si facciano sentire e che indichino la
> "linea" di questo ng ...
eccomi :-P
.m
--
Mauro Servienti
{C67C0157-5D98-4733-A75E-93CAEE4BADC8}
Microsoft MVP - Visual C# / MCTS
http://mvp.support.microsoft.com
blog @
http://milestone.topics.it
whynot [ at ] topics [ dot ] it


title: [OT] Re: Presentazione

author: nibble

text:
In bocca al lupo per il nuovo NG!
ciao


title: Applicazione C# .NET 4 con dll in .net 2

author: Davide

text:
Buongiorno,
premetto che sono un newbie per tutto il mondo .NET e C#.
Sto facendo delle prove creando una prima applicazione di test in C#,
e voglio importare una libreria (dll) scritta da altri, in .net
v2.0.50727, l'ho aggiunta nel mio progetto sotto le References. Il
problema è che io il mio progetto si appoggia al runtime .net 4 e
quindi alla partenza mi scatta subito questa eccezzione:
"Mixed mode assembly is built against version 'v2.0.50727' of the
runtime and cannot be loaded in the 4.0 runtime without additional
configuration information."
Quindi la mia domanda è ovvia, non posso importare delle librerie
scritte in .net (di un'altra versione) ?
Se ho delle altre librerie scritte in .net 3.5 (ad esempio) non posso
utilizzarle entrambe nello stesso progetto?
Grazie per l'aiuto.
Saluti, Davide


author: LudovicoVan

text:
On Mar 2, 10:08 am, Davide <
visconti.dav...@gmail.com
> wrote:
> Buongiorno,
> premetto che sono un newbie per tutto il mondo .NET e C#.
> Sto facendo delle prove creando una prima applicazione di test in C#,
> e voglio importare una libreria (dll) scritta da altri, in .net
> v2.0.50727, l'ho aggiunta nel mio progetto sotto le References. Il
> problema è che io il mio progetto si appoggia al runtime .net 4 e
> quindi alla partenza mi scatta subito questa eccezzione:
>
> "Mixed mode assembly is built against version 'v2.0.50727' of the
> runtime and cannot be loaded in the 4.0 runtime without additional
> configuration information."
Il problema (a quanto leggo in rete) si risolve aggiungendo quanto
segue nel file di configurazione dell'applicazione (nel tuo caso
immagino si tratti semplicemente dell'app.config):
<configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">
        <supportedRuntime version="v4.0" />
    </startup>
</configuration>
Accertati di avere anche una reference a System.Configuration nel
progetto.
Piu' in generale, tieni a mente che di solito e' sufficiente cercare
su Internet il messaggio di errore, perche' e' quasi sicuro che altri
prima di te hanno incontrato e dovuto risolvere il problema...
Hope that helps e in bocca al lupo per la tua avventura con .Net.
-LV


text:

Grazie Ludovico,
sembra che funzioni...
Ti giuro che ho sbattuto la testa contro google per qualche ora ma
niente.
E' proprio vero che se non inserisci le corrette chiavi di ricerca ti
ritrovi a brancolare nel buio, infatti da idiota non ho pensato di
cercare la stringa:
"Mixed mode assembly is built against version 'v2.0.50727' of the
runtime and cannot be loaded in the 4.0 runtime without additional
configuration information."
...ed avrei risolto al volo.
Comunque grazie di nuovo per il supporto e crepi il lupo!
Davide


title: VBexpress 2008 - Disegnare su PictureBox, Image o altro [WinForm]

text:
Come da oggetto, avete per caso uno straccio di snippet (ma
completo) che da un paio di coordinate bidimensionali,
consenta di disegnare una linea (direttamente visibile nella
client area del controllo opportuno, a vostra scelta, ma per
me meglio il più leggero e agile dei due) ?
Inclusa inizializzazione e cleanup di quanto necessario.
Non me la sbroglio più. Qualcosa di runtime, niente
caricamento files immagine esterni
grazie infinite x ogni dritta
(ah, gli snippet che ho preso dall'help non mi fungono, e
non esce nessun suggerimento di correzione automatica,
quando hoovo sopra la sottolineatura d'errore). Boh
ciao
Soviet


title: [OT] Se avete programmato troppo...

author: DavCori

text:
...potreste ritrovarvi inq uesta situazione :D
http://www.youtube.com/watch?v=PiCeqtGHpJI
Thanks.
--
DavCori


title: DatagridView "interrompere" ordinamento

author: Innuendo

text:
Ciao a tutti,
ho un problema con una datagridview.
La datagridview è ordinata per un campo in questo modo
dg1.Sort(dg1.Columns("peso"),
System.ComponentModel.ListSortDirection.Ascending)
Il campo "peso" inizialmente è crescente di 10 in 10, poi l'utente se
vuole spostare una riga modifica il peso e la riga si sposta
correttamente seguendo l'ordinamento.
Ad esempio se nella datagrid ho
a 10
b 20
c 30
d 40
e imposto c a 12, e d a 15 subito dopo (istantaneamente) vedo
a 10
c 12
d 15
b 20
Fino qua tutto bene. Il problema si presenta quando vado a salvare i
dati sul db. Prima di salvarli mi piacerebbe risistemare i pesi di 10 in
10 di modo che se un domani l'utente vuole modificare di nuovo le righe
si trova come nel caso di partenza.
Per la modifica dei pesi ho fatto un piccolo ciclo
Dim row As DataGridViewRow
Dim i As Integer = 10
For Each row In dg1.Rows
   If row.Index < (dg1.Rows.Count - 1) Then
     row.Cells("peso").Value = i
     i = i + 10
   End If
Next
Ma quando vado a modificare il valore della seconda riga e lo pongo
uguale a 20 questa diventa istantaneamente la terza perche' viene
riordinata prima di passare al successivo ciclo, quindi la riga con peso
15 non la leggo mai.
Come posso evitare questo problema?
ciao, grazie
Mauro


title: DatagridView "interrompere" ordinamento

author: Alessandro Riolo

text:
"Innuendo" <a@b.c> wrote:
> Ma quando vado a modificare il valore della seconda riga e lo pongo uguale
> a 20 questa diventa istantaneamente la terza perche' viene riordinata
> prima di passare al successivo ciclo, quindi la riga con peso 15 non la
> leggo mai.
>
> Come posso evitare questo problema?
Una delle possibili soluzioni ï¿œ quella di enumerare al contrario.
--
ale
http://ale.riolo.co.uk


title: DatagridView "interrompere" ordinamento

text:
Ciao Innuendo,
You wrote on 03/11/2010 :
> Fino qua tutto bene. Il problema si presenta quando vado a salvare i dati sul
> db. Prima di salvarli mi piacerebbe risistemare i pesi di 10 in 10 di modo
> che se un domani l'utente vuole modificare di nuovo le righe si trova come
> nel caso di partenza.
[CUT]
> Ma quando vado a modificare il valore della seconda riga e lo pongo uguale a
> 20 questa diventa istantaneamente la terza perche' viene riordinata prima di
> passare al successivo ciclo, quindi la riga con peso 15 non la leggo mai.
>
> Come posso evitare questo problema?
La domanda sorge spontanea: perchï¿œ ti complichi la vita usando pesi di
10 in 10? se usassi pesi consecutivi non avresti nessun problema del
genere.
.m
--
Mauro Servienti
{C67C0157-5D98-4733-A75E-93CAEE4BADC8}
Microsoft MVP - Visual C# / MCTS
http://mvp.support.microsoft.com
blog @
http://milestone.topics.it
whynot [ at ] topics [ dot ] it


title: DatagridView "interrompere" ordinamento

text:
Il 04/11/2010 05:21, Mauro Servienti [MVP] ha scritto:
> La domanda sorge spontanea: perchè ti complichi la vita usando pesi di
> 10 in 10? se usassi pesi consecutivi non avresti nessun problema del
> genere.
perche' se uso pesi consecutivi come fa l'utente a spostare il 5
elemento al 3 posto?
Se gli assegna peso 3 poi mi ritrovo con due elementi di peso 3 e non so
quale mettere per primo.
ciao
Mauro


title: DatagridView "interrompere" ordinamento

text:
Il 03/11/2010 23:51, Alessandro Riolo ha scritto:
> Una delle possibili soluzioni è quella di enumerare al contrario.
Mhhh .... soluzione interessante, adesso ci provo.
ciao, grazie
Mauro


title: DatagridView "interrompere" ordinamento

text:
Ciao Innuendo,
You wrote on 04/11/2010 :
> perche' se uso pesi consecutivi come fa l'utente a spostare il 5 elemento al
> 3 posto?
>
> Se gli assegna peso 3 poi mi ritrovo con due elementi di peso 3 e non so
> quale mettere per primo.
vado molto a naso ma:
- hai una lista con l'informazione del "sort";
- metti in binding la lista, attraverso una DataView sortata;
- vuoi spostare l'elemento 7 prima dell'elemento 3;
- ti prendi una reference all'elemento 7;
- sposti quelli che stanno tra il 3 (compreso) e il 6 (compreso) in
avanti di uno;
- riprendi la reference all'elemento 7 e gli dai peso 3;



title: Hello World,errore!!!

author: Piero

text:
Buongiorno a tutti,
stņ studiando C Sharp con Visual Studio 2010 e mi sono reso conto che un
banale .exe come Hello World creato con questo programma una volta eseguito
su un altro PC mi segnala il seguente errore: "Applicazione non
correttamente inizializzata(0xc0000135).Fare clic su OK per chiudere
l'applicazione". Girovagando in rete sembrerebbe che questo sia dovuto al
framework installato sulla macchina che con Visual Studio 2010 dovrebbe
essere il 4.0 ,di conseguenza ho provato a disinstallare nel PC in questione
il vecchio framework mediante "cleanup_tool "  e installare il nuovo
framework  "dotNetFx40_Full_x86_x64"  ma niente da fare,l'errore
permane.Sapreste mica dirmi che tipo di aggiornamento devo fare nel PC in
questione per fare eseguire correttamente Hello World.exe creato con Visual
Studio 2010?
Grazie per una eventuale risposta.


title: Hello World,errore!!!

text:
Piero wrote:
> Buongiorno a tutti,
>
> stò studiando C Sharp con Visual Studio 2010 e mi sono reso conto che un

Le varie versioni di framework convivono benissimo sulla stessa
macchina, quindi il problema è un altro.
Prova a reinstallare tutto vs2010 verificando di non avere
virus/malware etc.
--
Raffaele Rialdi
http://www.iamraf.net
Weblog:
http://blogs.ugidotnet.org/raffaele
Microsoft MVP profile
https://mvp.support.microsoft.com/profile/raffaele
UGIdotNET -
http://www.ugidotnet.org/


title: Hello World,errore!!!

text:
"Raffaele Rialdi [MVP]" <
malta@n0spam_vevy.com
> ha scritto nel messaggio
news:mn.92a07db6e...@n0spamvevy.com...
> Piero wrote:
>> Buongiorno a tutti,
>>
>> stï¿œ studiando C Sharp con Visual Studio 2010 e mi sono reso conto che un
>> banale .exe come Hello World creato con questo programma una volta
>> eseguito su un altro PC mi segnala il seguente errore: "Applicazione non
>> correttamente inizializzata(0xc0000135).Fare clic su OK per chiudere
>> l'applicazione". Girovagando in rete sembrerebbe che questo sia dovuto al
>> framework installato sulla macchina che con Visual Studio 2010 dovrebbe
>> essere il 4.0 ,di conseguenza ho provato a disinstallare nel PC in
>> questione il vecchio framework mediante "cleanup_tool "  e installare il
>> nuovo framework  "dotNetFx40_Full_x86_x64"  ma niente da fare,l'errore
>> permane.Sapreste mica dirmi che tipo di aggiornamento devo fare nel PC in
>> questione per fare eseguire correttamente Hello World.exe creato con
>> Visual Studio 2010?
>>
>> Grazie per una eventuale risposta.
>
> Le varie versioni di framework convivono benissimo sulla stessa macchina,
> quindi il problema ï¿œ un altro.
> Prova a reinstallare tutto vs2010 verificando di non avere virus/malware
> etc.
>
> --
> Raffaele Rialdi
http://www.iamraf.net
> Weblog:
http://blogs.ugidotnet.org/raffaele
> Microsoft MVP profile
https://mvp.support.microsoft.com/profile/raffaele
> UGIdotNET -
http://www.ugidotnet.org/
>
Ciao Raffaele,
ho verficato non ho virus nï¿œ malware,lavoro in una grande azienda e ho modo
di testare diversi PC,purtroppo mi succede che Hello World.exe sui PC mi
segnala errore ma forse deve essere l'antivirus,usiamo McAfee configurato
molto restrittivamente.Anche per un'applicazione di un semplice database con
i classici insert,update,delete mi segnala errore.Se provo Hello World in un
PC non aziendale tutto funziona ma l'applicazione con il database invece
no,quello mi dï¿œ sempre errore.
Mha....non capisco.....


title: Hello World,errore!!!

text:
Piero wrote:
> Ciao Raffaele,
> ho verficato non ho virus nï¿œ malware,lavoro in una grande azienda e ho modo
> di testare diversi PC,purtroppo mi succede che Hello World.exe sui PC mi
> segnala errore ma forse deve essere l'antivirus,usiamo McAfee configurato
> molto restrittivamente.Anche per un'applicazione di un semplice database con
> i classici insert,update,delete mi segnala errore.Se provo Hello World in un
> PC non aziendale tutto funziona ma l'applicazione con il database invece
> no,quello mi dï¿œ sempre errore.
> Mha....non capisco.....
Ciao,
non sarebbe la prima volta che un antivirus faccia brutti scherzi.
Una prova senza ï¿œ d'obbligo.
Ad ogni modo il problema ï¿œ anomalo e sembra piï¿œ riconducibile alla tua
installazione piuttosto che ad altre cose.



title: TreeView e icone

author: MasterControl

text:
Ciao
ho un treeView con una serie di nodi
al treeView ho associato una imageLIst
vorrei che per solo alcuni nodi venga visualizzata un 'icona memorizzata
nell' imageList, ma ottengo che tutti i nodi vengono rappresentati da la
stessa icona, ovvero la prima dell' ImageList.
Anche se assegno in modo esplicito ad un certo nodo l'indice dell'icona
in questione.
consigli?
grazie


title: MSbuild: come posso far compilare una solution sia per il fw3.5 che per il 4.0

text:
Buonasera a tutti,
sto iniziando ad usare in maniera semi-seria MSBuild ma sto avendo un
sacco di problemi che - come è mio solito - sono principalmente problemi
di approccio. :-)
Vi spiego la situazione. Ho una applicazione con una 20ina di progetti
(.csproj, di quelli generati automaticamente da VisualStudio) e un file
.proj con cui vorrei fare la build di tutti questi progetti.
Principalmente volevo sapere se è possibile far compilare tutto sia per
il fw4.0 che per il fw3.5 (ovviamente in path diversi :-)).
Grazie,
Giulio
--


title: Risolvere un conflitto tra i namespace

text:
Ciao a tutti,
ho una classe che si chiama MyNamespace.ILogger. Se nel mio codice
importo MyNamespace e NHibernate, ho un conflitto usando semplicemente
ILogger. E' possibile dire al compilatore (e all'intellisense) che se
uso semplicemente ILogger voglio usare MyNamespace.ILogger?
Grazie,
Giulio
--


title: Risolvere un conflitto tra i namespace

author: Andrea Angella

text:
Ciao Giulio,
puoi utilizzare using per definire un alias.
using ILogger = MyNamespace.ILogger;
Per maggiori informazioni:
http://msdn.microsoft.com/en-us/library/sf0df423%28VS.80%29.aspx
"Giulio Petrucci"  wrote in message
news:4cd0464e$0$40004$4faf...@reader3.news.tin.it...



title: Risolvere un conflitto tra i namespace

text:
Ciao Andrea,
On 11/2/2010 8:23 PM, Andrea Angella wrote:
> Ciao Giulio,
> puoi utilizzare using per definire un alias.
>
> using ILogger = MyNamespace.ILogger;
Grazie mille.
Corro a leggere il link.
Ciao,
Giulio
--


title: WPF problema con l'update di entità

author: Fabio

text:
Salve a tutti
ho una tabella clienti visualizzata in una datagrid
Se devo modificare un cliente:
wndCliente wnd=new wndCliente();
tbClienti cliente=datagrid.SelectedItem as tbClienti;
wnd.DataContext=cliente;
bool? result=wnd.ShowDialog();
if(result==true)
   {
       datacontext.SubmitChanges();
       datagrid.ItemsSource=datacontext.tbClienti.ToList();
   }
wndCliente contiene due bottoni uno annulla con isCancel=true e uno
conferma con isDefault=true.
Le textbox hanno tutti la proprietà UpdateSourceTrigger impostata su
PropertyChanged.
Se modifico ad esempio il nome del contatto e poi clicco su annulla, i
cambiamenti non vengono propagati al db, ma la lista clienti contiene
il valore modificato.
Come evito questo comportamento?
Saluti
Fabio


title: WPF problema con l'update di entità

author: marcosabba

text:
Il 04/02/2011 11:53, Fabio ha scritto:
> wndCliente contiene due bottoni uno annulla con isCancel=true e uno
> conferma con isDefault=true.
> Le textbox hanno tutti la propriet� UpdateSourceTrigger impostata su
> PropertyChanged.
> Se modifico ad esempio il nome del contatto e poi clicco su annulla, i
> cambiamenti non vengono propagati al db, ma la lista clienti contiene
> il valore modificato.
> Come evito questo comportamento?
cos� su due piedi proverei a non impostare UpdateSourceTrigger  su
PropertyChanged ma a fare il binding con una tua property "confirmed"
che gestisci nel code behind (o nel viewmodel se segui questo approccio)
Oppure, analogamente, usare l'enum Explicit e aggiornare a mano nel code
behind (o nel viewmodel) con updatesource()


title: WPF problema con l'update di entità

text:
On 4 Feb, 12:03, marcosabba <
mar...@bba.it
> wrote:
> Il 04/02/2011 11:53, Fabio ha scritto:
>
> > wndCliente contiene due bottoni uno annulla con isCancel=true e uno
> > conferma con isDefault=true.
> > Le textbox hanno tutti la propriet UpdateSourceTrigger impostata su
> > PropertyChanged.
> > Se modifico ad esempio il nome del contatto e poi clicco su annulla, i
> > cambiamenti non vengono propagati al db, ma la lista clienti contiene
> > il valore modificato.
> > Come evito questo comportamento?
>
> cos su due piedi proverei a non impostare UpdateSourceTrigger  su
> PropertyChanged ma a fare il binding con una tua property "confirmed"
> che gestisci nel code behind (o nel viewmodel se segui questo approccio)
Mi fa comodo perchè ho modificato la classe sottostante per adattarsi
a determinati comportamenti.
> Oppure, analogamente, usare l'enum Explicit e aggiornare a mano nel code
> behind (o nel viewmodel) con updatesource()
Ci avevo pensato ma in caso di window molto popolate potrebbe essere
poco pratico.
Credo, tuttavia, che dovrò seguire una delle tue indicazioni.
Grazie per l'aiuto.
Fabio


title: WPF problema con l'update di entità

text:
On 4 Feb, 12:03, marcosabba <
mar...@bba.it
> wrote:

Tu come gestisci questo genere di situazioni?
Ciao
Fabio


title: WPF problema con l'update di entità

text:

Attualmente mi sto sforzando di entrare il più possibile nell'ottica
Model-View-ViewModel, dunque cerco di sfruttare il più possibile i
binding a property definite nei viewmodel (che così diventano quasi dei
codebehind ma restano aperti alla testabilità e permettono di mantenere
un'indipendenza maggiore dalla view), dunque per la tua domanda,
sceglierei la prima soluzione.
Più in generale, ti dico che andando in direzione mvvm mi è stato
possibile, per esempio, cambiare completamente l'interfaccia di un
componente da una basata su tabcontrol a una basata su treeview,
mantenendo quasi intatti dei viewmodel che erano stati scritti per la
prima, anche se adesso non hanno propriamente una loro view associata.
Comunque, se nel tuo lavoro/progetto sei ancora in uno stadio iniziale,
ti consiglio di valutare l'utilizzo di qualche framework sovrastante il
wpf:
http://www.japf.fr/silverlight/mvvm/index.html
magari perderai un po' di tempo a sceglierlo e a capire come usarlo, ma
io che sono andato avanti un po' a tentativi adesso mi ritrovo con
strategie diverse usate per risolvere problemi simili, e il tutto è un
po' disomogeneo e di difficile lettura:
prima mi sono sforzato di usare grandi templates customizzati,
insistendo tanto su styles, triggers e quant'altro, lato xaml; poi mi
sono buttato sui command, adesso mi sto spaccando per usare uno stesso
modello di componente molto "mvvm compliant" per diversi componenti
sparsi nel mio progetto... insomma, forse adesso so quali errori non
rifarei, ma tornando indietro cercherei di "sposare" un framework.
Comunque qui nel newsgroup ci sono fior fior di persone che possono
consigliarti molto meglio di me!
Ciao


title: WPF problema con l'update di entità

text:

Ti ringrazio, sei stato molto paziente.
Mi studio il tuo link.
Ciao
Fabio


title: files e directory

text:
Ciao
domanda banale....
se ho delle directory e/o files che non voglio integrare come risorse ma
mantenerli esterni all'assembly, come devo operare?
Avevo letto che bastava inserire queste risorse nella stessa cartella di
debug dell'applicazione durante lo sviluppo....ma non ho ben inteso.
grazie


title: files e directory

text:
Ciao MasterControl,

che cosa devi fare?
.m
--
Mauro Servienti
{C67C0157-5D98-4733-A75E-93CAEE4BADC8}
Microsoft MVP - Visual C# / MCTS
http://mvp.support.microsoft.com/profile/mauro
blog @
http://milestone.topics.it
whynot [ at ] topics [ dot ] it


title: files e directory

text:
"MasterControl" <
Master...@cmp.it
> wrote:
> Avevo letto che bastava inserire queste risorse nella stessa cartella di
> debug dell'applicazione durante lo sviluppo....ma non ho ben inteso.
Per fare quello è meglio marcare la risorsa come Content, ma la risposta di
Mauro è quella corretta: cosa vuoi fare?
--
ale
http://ale.riolo.co.uk


title: Bindingsource.RemoveCurrent non funziona

author: Alessio Forconi

text:
Salve a tutti,
ho un db sql server 2005 con la connessione impostata non con il
wizard di VS e una datagrid collegata al bindingsource.
Accade che quando elimino una riga in effetti viene eliminata ma
riaprendo l'applicazione mi accorgo che è ancora li, quindi le
modifiche non vengono trasmesse al database.
nell'evento del button ho messo questo
private void btnFerieElimina_Click(object sender, EventArgs e)
{
    binsourceFerie.RemoveCurrent();
    binsourceFerie.EndEdit();
}
per la connessione uso questo
private void LoadAndShowFerie()
{
    sqldadptrFerie = new SqlDataAdapter("SELECT * FROM Godute",
connString);
    sqldadptrFerie.Fill(dtblFerie);
    binsourceFerie.DataSource = dtblFerie;
    binsourceFerie.Filter = "Categoria='Ferie'";
    gridFerie.DataSource = binsourceFerie;
}
Dove sbaglio? Come posso fare?
Grazie.


text:
Ciao Alessio Forconi,
You wrote on 06/06/2011 :
> private void btnFerieElimina_Click(object sender, EventArgs e)
> {
>     binsourceFerie.RemoveCurrent();
>     binsourceFerie.EndEdit();
> }
>
[snip]
> Dove sbaglio? Come posso fare?
che EndEdit seplicemente fa il commit delle modifiche verso la
DataSource ma nulla di più da li al db ci devi ancora andare e devi
farlo tu.
Documentazione delle mie brame :-)
http://msdn.microsoft.com/en-us/library/system.windows.forms.bindingsource.endedit.aspx
.m
--
Mauro Servienti
{C67C0157-5D98-4733-A75E-93CAEE4BADC8}
Microsoft MVP - Visual C# / MCTS
http://mvp.support.microsoft.com/profile/mauro
blog @
http://milestone.topics.it
whynot [ at ] topics [ dot ] it


text:
On 6 Giu, 10:47, Mauro Servienti [MVP] <mauroservie...@online.nospam>
wrote:
> Ciao Alessio Forconi,
>
> You wrote on 06/06/2011 :
>
> > private void btnFerieElimina_Click(object sender, EventArgs e)
> > {
> >     binsourceFerie.RemoveCurrent();
> >     binsourceFerie.EndEdit();
> > }
>
> [snip]
>
> > Dove sbaglio? Come posso fare?
>
> che EndEdit seplicemente fa il commit delle modifiche verso la
> DataSource ma nulla di più da li al db ci devi ancora andare e devi
> farlo tu.
> Documentazione delle mie brame :-)
http://msdn.microsoft.com/en-us/library/system.windows.forms.bindings.
..
>
> .m
Grazie Mauro per il link.
A dir la verità mi pare una spiegazione alquanto ermetica, per le mie
capacità perlomeno :)
Vuoi dire che devo scrivere io i comandi per aggiornare il db?
Dove posso trovare uno spunto?
Grazie ancora.


text:
Ciao Alessio,
You wrote on 06/06/2011 :
> A dir la verità mi pare una spiegazione alquanto ermetica, per le mie
> capacità perlomeno :)
> Vuoi dire che devo scrivere io i comandi per aggiornare il db?
> Dove posso trovare uno spunto?
Perdonami ma se usi qualcosa senza avere la più pallida idea di come
funziona, perchè è ovvio che non ne hai la più pallida idea, come puoi
dire che la documentazione sia criptica?
Comunque:
http://support.microsoft.com/kb/308507/en-us



text:
On 6 Giu, 15:00, Mauro Servienti [MVP] <mauroservie...@online.nospam>
wrote:
> Ciao Alessio,
>
> You wrote on 06/06/2011 :
>
> Perdonami ma se usi qualcosa senza avere la più pallida idea di come
> funziona, perchè è ovvio che non ne hai la più pallida idea, come puoi
> dire che la documentazione sia criptica?
Dico che è ermetica per il semplice motivo che io non l'ho capita e
non l'ho capita perchè sto usando qualcosa che non conosco e visto che
non conosco la cosa che sto cercando di usare eccomi qui a chiedere
delucidazioni e aiuto, altrimenti non sarebbe così.
Non ci vedo tutto questo motivo di scandalo...
D'altronde tu non hai mai chiesto lumi a chi ne sa più di te? Hai
sempre capito tutto alla prima? Io no :)
> Comunque:
http://support.microsoft.com/kb/308507/en-us
Grazie, ora me la studio.


text:
Ciao Alessio,
You wrote on 06/06/2011 :
> Dico che è ermetica per il semplice motivo che io non l'ho capita e
> non l'ho capita perchè sto usando qualcosa che non conosco e visto che
> non conosco la cosa che sto cercando di usare eccomi qui a chiedere
> delucidazioni e aiuto, altrimenti non sarebbe così.
> Non ci vedo tutto questo motivo di scandalo...
non mi scandalizza il non conoscere quanto la disinvoltura con cui ci
si aspetta che gli altri facciano il lavoro per te (o chiunque chieda
nel modo in cui stai chiedendo tu), non ce l'ho minimamente con te sia
chiaro.
> D'altronde tu non hai mai chiesto lumi a chi ne sa più di te? Hai
> sempre capito tutto alla prima? Io no :)
quasi mai capisco tutto al primo colpo ma di sicuro mi faccio una
quantità industriale di domande prima di chiedere in giro, ma
soprattutto leggo e cerco documentazione.
Se facciamo una breve analisi della domanda e partiamo dal problema, o
presunto tale:
private void btnFerieElimina_Click(object sender, EventArgs e)
{
    binsourceFerie.RemoveCurrent();
    binsourceFerie.EndEdit();
}
scopriamo che ci sono due righe di codice che richiamano funzionalità
built-in nel framework. Ora partire dal presupposto che se quelle due
righe di codice non producono il risultato che ci si aspetta sia
imputabile ad un bug o malfuzionamento (perchè "RemoveCurrent non
funziona" questo significa a casa mia) mi sembra un filino presuntuoso,
soprattutto se non si sa cosa fanno quelle due righe di codice.
Se andiamo a guardare la documentazione, per EndEdit troviamo: "Applies
pending changes to the underlying data source." mentre per
RemoveCurrent: "Removes the current item from the list.".
Senza approfondire oltre la prima cosa che mi salta all'occhio è che da
nessuna parte, neanche nei remarks, si parla di DataBase, ma sempre e
solo di DataSource o List, ergo il BindingSource non sa assolutamente
nulla di database ma si appooggia ad una DataSource, che in questo caso
è una DataTable (per l'esattezza una DataView, ma è un dettaglio):
private void LoadAndShowFerie()
{
    sqldadptrFerie = new SqlDataAdapter("SELECT * FROM Godute",
connString);
    sqldadptrFerie.Fill(dtblFerie);
    binsourceFerie.DataSource = dtblFerie;
    binsourceFerie.Filter = "Categoria='Ferie'";
    gridFerie.DataSource = binsourceFerie;
}
caricata da codice; questo però evidenzia il fatto che non è ben chiaro
il concetto di *disconnesso* del mondo ADO.Net: una volta che è stato
chiamato il metodo Fill del DataAdapter e i dati sono stati caricati in
memoria per la DataTable in questione il DataBase non esiste più, per
l'esattezza la DataTable non ha mai saputo un bel nulla di DataBase,
l'unico che sa qualcosa del fatto che esista un DataBase è proprio il
DataAdapter, che dopo aver fatto il suo lavoro di caricamento si
dimentica proprio dell'esistenza del db (tant'è che si potrebbe
tranquillamente staccare il cavo di rete e tutto funzionerebbe che è un
piacere).
Quello che succede quindi è:
- connessione al db;
- caricamento dei dati;
- *disconnessione* dal db;
- uso dei dati in memoria, conservati in una struttura che si chiama
DataTable, come DataSource di qualcosa;
- la DataTable viene consumata dal BindingSource (cosa che nel caso di
una DataTable/DataView è una ridondanza inutile) come DataSource;
- il BindingSource diventa DataSource di un controllo Windows Forms
come la DataGrid che *sa* come fare a dialogare con qualcosa che è
IBindingList, cosa che il BindingSource è.



text:
Ciao Alessio,
You wrote on 06/06/2011 :
> Dici che "ti sembra un filino presuntuoso"... diciamo che se sembra a
> te non è necessariamente detto che sia così in realtà; mi stai
> attribuendo intenzioni che non ho mai avuto e stai dando dei
> significati alle mie parole che non ho mai avuto intenzione di
> attribuirgli io stesso, forse per te è giusto leggermi così ma il
> beneficio del dubbio è quantomeno doveroso.
il beneficio del dubbio c'è sempre questo è ovvio, in questo caso mi
baso su un fatto solo, questo:"Bindingsource.RemoveCurrent non
funziona" che in italiano ha un significato non opinabile, tutto li.



text:
Al di la di tutto l'esempio che hai fatto, di cui ti ringrazio ma che
io non avevo chiesto perchè avevo solo cercato un'opinione e un
suggerimento su dove fosse il problema dato che non riuscivo a capire
da solo, mi pare che stia andando oltre le mie parole.
Dici che "ti sembra un filino presuntuoso"... diciamo che se sembra a
te non è necessariamente detto che sia così in realtà; mi stai
attribuendo intenzioni che non ho mai avuto e stai dando dei
significati alle mie parole che non ho mai avuto intenzione di
attribuirgli io stesso, forse per te è giusto leggermi così ma il
  beneficio del dubbio è quantomeno doveroso... non mi pare di aver
imputato ad altri o a bug vari ed eventuali i malfunzionamenti del
 codice che ho scritto.
D'altronde in prima battuta ho chiesto un punto di vista esterno e
più capace e successivamente una fonte per documentarmi, tutto qui...
non   ho mai chiesto qualcosa del tipo "per favore mi scrivi due righe
di   codice così poi vado avanti da solo?" e neanche ho inteso farlo
sotto   traccia, tanto è vero che tra le prime ho cose ho chiesto di
indicarmi dove stavo sbagliando.
Inoltre, e chiudo, chi ti dice che non mi documenti
contemporaneamente  alle richieste che posto qui? E se fosse, in
effetti è, proprio  così?
Dai di nuovo per assunto il principio che chiunque chiede qui aspetti
la pappa scodellata? Non fare quest'errore, non tutti sono così.
Detto ciò tutto il ragionamento che fai adesso me lo studio bene e di
nuovo ti ringrazio.
On 6 Giu, 20:53, Mauro Servienti [MVP] <mauroservie...@online.nospam>
wrote:

> blog @
http://milestone.topics.it



title: Lambda expressions e performance

author: Giulio Petrucci

text:
Buonasera a tutti,
ho una situazione del genere: una classe "EventManager" che espone un
metodo "HandleEvent(int) : string". Se il numero è pari, richiama un
gestore, altrimenti ne richiama un altro.
Prima soluzione:
interface IEventHandler
{
	string Handle(int n);
}
class OddEventHandler : IEventHandler { ... }
class EvenEventHandler : IEventHandler { ... }
class EventManager {
	public EventManager(IEventHandler odd, IEventHandler even) { ... }
	public void HandleEvent(int n)
	{
		if (n % 2 == 0) even.Handle(n);
		else odd.Handle(n);
	}
}
in sintesi: strategy pattern. Ora, siccome tutto ciò che è
simil-funzionale esercita su di me una attrazione spasmodica, mi
chiedevo: e se facessi così?
class EventManager
{
	public EventManager(Func<int, string> odd, Func<int, string> even) { ... }
	public void HandleEvent(int n)
	{
		if (n % 2 == 0) even.Handle(n);
		else odd.Handle(n);
	}
}
A livello concettuale cambia solo il fatto che la stretgy è iniettata
come lambda expression (o "puntatore a funzione", per usare un'immagine
arcaica ma a cui tutti vogliamo tanto bene) piuttosto che come
interfaccia di cui si richiama un metodo. Ma - mi chiedo - c'è
differenza a livello di performance?
Grazie,
Giulio
--


title: Lambda expressions e performance

text:
Ciao Giulio,
You wrote on 17/11/2010 :
> A livello concettuale cambia solo il fatto che la stretgy è iniettata come
> lambda expression (o "puntatore a funzione", per usare un'immagine arcaica ma
> a cui tutti vogliamo tanto bene) piuttosto che come interfaccia di cui si
> richiama un metodo. Ma - mi chiedo - c'è differenza a livello di performance?
a naso direi proprio di no.
.m
--
Mauro Servienti
{C67C0157-5D98-4733-A75E-93CAEE4BADC8}
Microsoft MVP - Visual C# / MCTS
http://mvp.support.microsoft.com
blog @
http://milestone.topics.it
whynot [ at ] topics [ dot ] it


title: Lambda expressions e performance

text:
Giulio Petrucci wrote:
> A livello concettuale cambia solo il fatto che la stretgy è iniettata come
> lambda expression (o "puntatore a funzione", per usare un'immagine arcaica ma
> a cui tutti vogliamo tanto bene) piuttosto che come interfaccia di cui si
> richiama un metodo. Ma - mi chiedo - c'è differenza a livello di performance?
Lambda ==> anonymous delegate
Quindi si applica tutto ciò che riguarda i delegate ...
--
Raffaele Rialdi
http://www.iamraf.net
Weblog:
http://blogs.ugidotnet.org/raffaele
Microsoft MVP profile
https://mvp.support.microsoft.com/profile/raffaele
UGIdotNET -
http://www.ugidotnet.org/


title: Lambda expressions e performance

text:
Ciao Giulio,
You wrote on 17/11/2010 :
> class EventManager
> {
>     public EventManager(Func<int, string> odd, Func<int, string> even) { ...
> }
>     public void HandleEvent(int n)
>     {
>         if (n % 2 == 0) even.Handle(n);
>         else odd.Handle(n);
>     }
> }
oltre a quello che giustamente ha detto Raff aggiungo che non c'è
nessuna lambda expression nel tuo esempio, semplicemente potresti
chiamare il costruttore di EventManager usando la sintassi della lambda
ma non usando una lambda expression. Altrimenti dovresti avere questo:
EventManager( Expression<Func<int, string>> odd, Expression<Func<int,
string>> even)
che è cosa molto diversa.



title: Lambda expressions e performance

text:
Ciao Raf,
innanzitutto grazie per la risposta.
On 11/17/2010 8:01 PM, Raffaele Rialdi [MVP] wrote:
> Lambda ==> anonymous delegate
> Quindi si applica tutto ciò che riguarda i delegate ...
Uhm... a occhio ti direi che non ho capito molto quello che vuoi dire. :-)
Puoi girarmi qualche link o indicarmi cosa cercare in rete?
Grazie,
Giulio
--


title: Lambda expressions e performance

text:
Ciao Mauro,
On 11/18/2010 5:30 AM, Mauro Servienti [MVP] wrote:
> oltre a quello che giustamente ha detto Raff aggiungo che non c'è
> nessuna lambda expression nel tuo esempio, semplicemente potresti
> chiamare il costruttore di EventManager usando la sintassi della lambda
> ma non usando una lambda expression. Altrimenti dovresti avere questo:
>
> EventManager( Expression<Func<int, string>> odd, Expression<Func<int,
> string>> even)
>
> che è cosa molto diversa.
Ok... credo di cominciare a capire. Dunque (con riferimento all'inizio
di questo articolo qui
http://www.elguille.info/NET/futuro/firmas_octavio_ArbolesExpresiones_EN.htm
)
i delegate anonimi (i.e. Func<>) vengono compilati, mentre le
espressioni (i.e. Expression<Func<>>) vengono interpretate secondo un
AST costruito in memory, right?
Quali sono le differenze tra i due approcci in termini di performances,
occupazione di memoria, ecc ecc... ? C'è qualche documento ufficiale?
Ciao,
Giulio
--


title: Lambda expressions e performance

text:
Giulio Petrucci wrote:
>> Lambda ==> anonymous delegate
>> Quindi si applica tutto ciò che riguarda i delegate ...
>
> Uhm... a occhio ti direi che non ho capito molto quello che vuoi dire. :-)
> Puoi girarmi qualche link o indicarmi cosa cercare in rete?
Ciao Giulio,
dicevo solo che le lambda sono un modo conveniente per esprimere
l'equivalente di un delegate. Quindi tutto ciò che riguarda le
performance va letto in chiave delegate.
Questo articolo è un overview da delegate a lambda:
http://msdn.microsoft.com/en-us/library/bb397687.aspx



title: Lambda expressions e performance

text:
Ciao Giulio,
You wrote on 18/11/2010 :
> Ok... credo di cominciare a capire. Dunque (con riferimento all'inizio di
> questo articolo qui
>
http://www.elguille.info/NET/futuro/firmas_octavio_ArbolesExpresiones_EN.htm
)
> i delegate anonimi (i.e. Func<>) vengono compilati, mentre le espressioni
> (i.e. Expression<Func<>>) vengono interpretate secondo un AST costruito in
> memory, right?
Non ho ben presente cosa intendi per interpretate, ma no non vengono
proprio interpretate una Expression è un dato che rappresenta una
porzione di codice :-)
> Quali sono le differenze tra i due approcci in termini di performances,
> occupazione di memoria, ecc ecc... ? C'è qualche documento ufficiale?
nel tuo scenario le Expression non servono a nulla, ti servono i
delegati, in generale, a parte le similitudini sintattiche, non ha
senso confrontare delegate ed expression, sono un po' mele e pere :-P



title: Lambda expressions e performance

text:
Ciao Mauro,
grazie per la risposta.
On 11/19/2010 5:39 AM, Mauro Servienti [MVP] wrote:
> Non ho ben presente cosa intendi per interpretate, ma no non vengono
> proprio interpretate una Expression è un dato che rappresenta una
> porzione di codice :-)
Ok. Ho comunque bisogno di una descrizione più "a basso livello" quindi
appena ho un po' di tempo, inizio a stressare Google. :-)
> nel tuo scenario le Expression non servono a nulla, ti servono i
> delegati,
Perfetto. :-)
Grazie,
Giulio
--


title: controllo banner

author: Romano

text:
Ciao a tutti,
sono un programmatore in c# e vorrei creare su una winform
un oggetto (un panel con dentro delle button) che spunta dalla destra di
una form e si blocca a metà mostrando le button al suo interno:
Una sorta di banner con la panel.
Spero di essere spiegato bene.
E' possibile fare qualcosa del genere usando Visual studio 2005 e senza
utilizzare wpf ?


title: controllo banner

text:

Non ho capito che cosa intendi per "spunta dalla destra ..."
--
Raffaele Rialdi
http://www.iamraf.net
Weblog:
http://blogs.ugidotnet.org/raffaele
Microsoft MVP profile
https://mvp.support.microsoft.com/profile/raffaele
UGIdotNET -
http://www.ugidotnet.org/


title: controllo banner

text:
Il 28/01/2011 12:55 PM, Raffaele Rialdi [MVP] ha scritto:
> Romano wrote:
>> Ciao a tutti,
>> sono un programmatore in c# e vorrei creare su una winform
>> un oggetto (un panel con dentro delle button) che spunta dalla destra
>> di una form e si blocca a metà mostrando le button al suo interno:
>> Una sorta di banner con la panel.
>>
>> Spero di essere spiegato bene.
>>
>> E' possibile fare qualcosa del genere usando Visual studio 2005 e
>> senza utilizzare wpf ?
>
> Non ho capito che cosa intendi per "spunta dalla destra ..."
>
Hai ragione, forse mi sono espresso in modo infelice:
Intendo che una volta che si clicca all'estrema destra del form compare
questo banner muovendosi da destra a sinistra e fermandosi a metà form.


title: controllo banner

text:
Romano wrote:
> Hai ragione, forse mi sono espresso in modo infelice:
> Intendo che una volta che si clicca all'estrema destra del form compare
> questo banner muovendosi da destra a sinistra e fermandosi a metà form.
Certo che puoi farlo, se nel banner c'è una bassa complessità grafica
dovresti farcela comodamente anche con GDI di Winform.
Devi gestirti tutto da te e se non hai qualche nozione di animazione
grafica ovviamente avrai difficoltà.
Diciamo di avere un Panel che funge da contenitore per un altro
controllo interno che mostra un contenuto che slitta da destra a
sinistra.
Il panel determina anche la regione di clipping qualora il contenuto
vada oltre i suoi margini.
- Derivi il Panel in modo da isolare la logica del movimento lì dentro.
- Nel tuo panel ti crei un timer con un intervallo di tempo
sufficientemente rapido da non causare un movimento a scatto ...
diciamo 1/10 di secondo tanto per provare, poi starà a te modificarlo.
- nella funzione chiamata dal timer incrementi una variabile della form
(o del controllo) che decide lo spostamento orizzontale del banner.
Se incrementi di 1 pixel, sarà molto morbido ma andrà lentamente. Se
incrementi di troppi pixel, anche se il timer va molto veloce il
movimento risulterà a scatti. Parti con 5 pixel e poi prova.
In questa funzione dovrai richiamare la Invalidate() del tuo controllo
per causare il ri-disegno del controllo. In pratica verrà chiamata la
OnPaint.
- La variabile che incrementi deve essere la posizione "Left" del
controllo contenuto nel Panel che scorre
Attenzione. Nel tuo Panel devi abilitare il double buffering usando
SetStyle dentro il costruttore.
http://www.bobpowell.net/doublebuffer.htm
Questo è un passo indispensabile per evitare il noioso effetto di
flickering.



title: Ria Services

author: Smalville

text:
Sto sviluppando tramite i RIA Services (quindi progetto di tipo
"Business Application") una semplice applicazione per la gestione di
alcune tabelle.
Ho già creato il modello EF e l'ho esposto tramite i DataServices.
Funziona egregiamente ma ho alcuni problemi a riguardo.
Diciamo che gestisco ovviamente delle tabelle che sul db ricalcano il
classico modello relazionale.
Per esempio : Registrazione, Categorie
Una registrazione può essere associata ad una ed una sola Categoria
(foreign key sul db e navigation property su EF).
Ho una datagrid in SL che presenta i record delle Registrazioni e la
descrizione della Categoria associata.
Selezionando un record, popolo una "form" sottostante mediante la
quale posso modificare i valori della registrazione e tramite una
combo vorrei permettere di selezionare una categoria tra tutte quelle
presenti nella tabelle Categorie, quindi salvare ed aggiornare la riga
corrispondente della mia datagrid.
Il tutto sembrava semplice come concetto, lo farei tranquillamente in
Asp.NET ma ho scoperto che in SL le combo sono un pò antipatiche ed
inoltre non riesco a fare in modo che quando salvo mi si aggiorni
anche la descrizione della categoria sulla datagrid.
Tutto viene salvato correttamente ma è necessario un reload della
pagina per vedere le modifiche...e non mi sembra il caso onestamente.
Sapresti dirmi come devo realizzare questi passi ? O se esiste un
webcast che affronta questa problematica a parer mio molto comune
ovvero quella di dover gestire le NavigationProperty correttamente su
SL ?
Grazie mille!
Ciao :)


title: [WPF] Tab Order Tool

text:
Ciao ragazzi,
volevo chiedervi se esiste un tool come in Windows Form per impostare
l'ordine dei tab graficamente semplicemente cliccando.
Non ho trovato nulla di simile ne in VS2010 ne in Expression Blend.
Voi come fate? Tutto manualmente?
Thanks


title: [WPF] Tab Order Tool

author: Mauro Servienti [MVP]

text:
Ciao Andrea Angella,
You wrote on 26/05/2011 :
> Ciao ragazzi,
> volevo chiedervi se esiste un tool come in Windows Form per impostare
> l'ordine dei tab graficamente semplicemente cliccando.
>
> Non ho trovato nulla di simile ne in VS2010 ne in Expression Blend.
su VS mi sa che devi fare a mano, mentre in Blend hai la Tool Window
"Objects & Timeline" dove puoi fare drag & drop per riordinare i
TabItem.
> Voi come fate? Tutto manualmente?
di solito si :-) anche se "aborro" il TabControl :-P
> Thanks
.m
--
Mauro Servienti
{C67C0157-5D98-4733-A75E-93CAEE4BADC8}
Microsoft MVP - Visual C# / MCTS
http://mvp.support.microsoft.com/profile/mauro
blog @
http://milestone.topics.it
whynot [ at ] topics [ dot ] it


title: [WPF] Tab Order Tool

text:
On Jun 1, 8:32 am, Mauro Servienti [MVP]

> blog @
http://milestone.topics.it
> whynot [ at ] topics [ dot ] it
Grazie Mauro.
Credo di essermi espresso male. Io intendevo l'ordine dei controlli
quando viene premuto il tasto TAB in una form. Quella che e' la
proprieta' TabIndex.
Per il TabControl penso non sia un grosso problema farlo manualmente.
Cosa usi al posto del TabControl?


title: [WPF] Tab Order Tool

text:
Ciao Andrea Angella,
You wrote on 01/06/2011 :
> Credo di essermi espresso male. Io intendevo l'ordine dei controlli
> quando viene premuto il tasto TAB in una form. Quella che e' la
> proprieta' TabIndex.
ooops :-) chiaro, no, non c'è nulla...purtroppo.
> Per il TabControl penso non sia un grosso problema farlo manualmente.
> Cosa usi al posto del TabControl?
fortunatamente lavoro in un'azienda dove l'architettura
dell'informazione è la UX sono uno dei focus quindi c'è un nutrito
gruppo di persone che si occupa di "disegnare" la UI e trovano
soluzioni decisamente fighe :-)
.m
--
Mauro Servienti
{C67C0157-5D98-4733-A75E-93CAEE4BADC8}
Microsoft MVP - Visual C# / MCTS
http://mvp.support.microsoft.com/profile/mauro
blog @
http://milestone.topics.it



title: SilverLight : DataForm Binding

text:
Ciao,
ho caricato tramite un RIA DomainDataSource una griglia.
Al cambio di selezione è possibile editare i dati della riga seleziona
all'interno di una DataForm.
In questa DataForm devo però visualizzare una combobox che carichi i
valori da un altro context in modo che l'utente possa eventualmente
modificare il valore selezionandolo dalla lista.
Come posso riuscire a caricare questa combo con un altro contesto ed
in seguito salvare tramite l'ID (che nell'EF è corrisponde alla mia
Navigation Property) ?
Scusatemi ma sono novello di SilverLight.
Grazie mille :)


title: Visual studio c# console.writeline()

author: Elefante

text:
        In Visual Studio C#

             Console.WriteLine("User code:   123456 ");

                       login.UserName = Console.ReadLine().PadLeft(8, '0');

        In questo modo mi esce su una finestra console di windows il numero
123456 con

        il puntatore posizionato per ricevere l'inserimento di 123456 e
return , cosa devo fare

        per inserire solamente return con il numero 123456 già posizionato
per l'inserimento e non doverlo

        ripetere  ?

Grazie.


title: Visual studio c# console.writeline()

author: ReadOnly

text:

La console di windows non mi risulta che consenta di fare quello che
vorresti tu, per lo meno non senza inventarsi cose strane (che per un
programma a linea di comando non hanno senso), quello che puoi fare è
verificare se ReadLine ritorna una stringa vuota e nel caso imposti tu
il valore di default.

--
r--r--r--


title: Visual studio c# console.writeline()

text:
Il giorno giovedì 12 aprile 2012 12:55:15 UTC+2, ReadOnly ha scritto:
 quello che puoi fare è
> verificare se ReadLine ritorna una stringa vuota e nel caso imposti tu
> il valore di default.

+1! :)

Al3x


title: OT:  libri di programmazione

author: Gimbo Giambo

text:
Vendo causa trasloco i seguenti libri in ottimo stato :

I trucchi di Visual Basic 6 francesco balena mondadori editore 8 Euro

VB 2005 express edition CREA I TUOI PROGRAMMI ( con cd ) patrice pelland
mondadori editore 10 Euro

Introduzione a microsoft VB.net 2005 sean campbell Mondadori editori 5

Visual web Developer 2005 CREA LE TUE PAGINE WEB (CON CD) Jim Buyens
mondadori informatica 10 Euro

Visual Basic.net Nozioni di Base Francesco Balenamondadori informatica 500
pagine 8 euro
Le macro di office   ivan venuti    Hoepli informatica     8

Vendo anche in blocco 40 euro +spese postali

https://annunci.ebay.it/seller/2fef5a94759a72962f311393b7d79147fb94b4d1/32771145?advance=1&activatedBy=unreg

p.s.  evitate polemiche gratuite  grazie


title: WCF su IIS

author: Carlo

text:
Ciao a tutti,
ho realizzato il mio primo WCF e l'ho pubblicato sull'IIS aziendale.
Se lo richiamo dal browser riesco a terstarlo e funziona.
Questo tipo di test va bene per i metodi semplici.
Ora ho dei metodi un po' più complessi che vorrei testare per bene.
Ho provato a fare un progetto di test in cui referenzio il mio
servizio, ma in runtime quando arrivo ad istanziare la classe
mioWCFclient mi da errore.
Could not find default endpoint element that references contract
'mioWCFService.mioWCF' in the ServiceModel client configuration
section. This might be because no configuration file was found for your
application, or because no endpoint element matching this contract
could be found in the client element.
Ho notato che nel file config del progetto di test non mi scrive nulla
contrariamente a quanto dice il libro che sto seguendo.
Anche inserendo a mano il file di config non funziona.
Qualche suggerimento?
Grazie mille
Carlo
WebConfig del wcf in cui ho sostituito il vero nome con MioWCF.MioWcf
<?xml version="1.0" encoding="utf-8"?>
<!--
  Per ulteriori informazioni su come configurare l'applicazione
ASP.NET
, visitare il sito Web all'indirizzo

http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
  <configSections>
    <sectionGroup name="applicationSettings"
type="System.Configuration.ApplicationSettingsGroup, System,
Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <section name="mioWCF.Properties.Settings"
type="System.Configuration.ClientSettingsSection, System,
Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
requirePermission="false" />
    </sectionGroup>
  </configSections>
  <system.web>
    <customErrors mode="Off" />
    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Data.Entity, Version=4.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      </assemblies>
    </compilation>
  </system.web>
  <system.serviceModel>
    <behaviors>
      <endpointBehaviors>
        <behavior name="miowcf.MioWCFAspNetAjaxBehavior">
          <enableWebScript />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
multipleSiteBindingsEnabled="true" />
    <services>
      <service name="MioWCF.mioWcf">
        <endpoint address=""
behaviorConfiguration="miowcf.MioWCFAspNetAjaxBehavior"
binding="webHttpBinding" contract="mioWCF.MioWCF" />
      </service>
    </services>
  </system.serviceModel>
  <connectionStrings>
    <add name="EcsEntities"
connectionString="metadata=res://...........;App=EntityFramework""
providerName="System.Data.EntityClient" />
  </connectionStrings>
  <applicationSettings>
  </applicationSettings>
</configuration>
--
web config del test
<configuration>
<system.serviceModel>
    <client>
      <endpoint address="
http://mioSito.com/MioWCF/MioWCF.svc
"
binding="basicHttpBinding" contract="MioWCF.MIowcf"></endpoint>
    </client>
  </system.serviceModel>
</configuration>


title: Sospendere un thread

text:
Ciao a tutti,
ho una interfaccia
interface IEventRaiser
{
	event EventHandler MyEvent;
}
questa interfaccia viene iniettata in una classe:
class EventWaiter
{
	protected IEventRaiser er;
	public EventWaiter(IEventRaiser er)
	{

this.er
 = er;
	}
	public void Wait() { ... }
}
il metodo Wait() deve in pratica "aspettare" il verificarsi dell'evento
er.MyEvent. Ho provato a implementare la cosa così:
public Wait() {
	var evt = new ManualReserEvent(false);
	this.er.MyEvent += (s, e) => { evt.Set(); }
	evt.WaitOne();
}
Ora, credo che a lungo andare (i.e. diverse istanze di EventWaiter)
l'uso massiccio di WaitHandle possa degradare le performance. Avevo
pensato allora di passare a Thread.Suspend()/Resume().
Cosa ne pensate?
Ciao e grazie,
Giulio


title: Sospendere un thread

author: Raffaele Rialdi [MVP]

text:
Giulio Petrucci wrote:
[...]
Ciao Giulio,
> il metodo Wait() deve in pratica "aspettare" il verificarsi dell'evento
> er.MyEvent. Ho provato a implementare la cosa così:
>
> public Wait() {
> 	var evt = new ManualReserEvent(false);
> 	this.er.MyEvent += (s, e) => { evt.Set(); }
> 	evt.WaitOne();
> }
>
> Ora, credo che a lungo andare (i.e. diverse istanze di EventWaiter) l'uso
> massiccio di WaitHandle possa degradare le performance. Avevo pensato allora
> di passare a Thread.Suspend()/Resume().
Non temere dregradi, va benissimo usare gli eventi.
Se l'evento è locale al tuo processo, puoi usare la versione Slim che
probabilmente ricorderai dalla mia sessione.
Inoltre ti suggerisco caldamente di usare WaitHandle.WaitAny
specificando un array di handle:
- il primo handle è un altro evento, di quit, per poter chiudere
'gracefully' il thread nel caso l'utente voglia interrompere tutto
- il secondo è quello che ti serve come waiter (quello che hai
postato).
Ciao
--
Raffaele Rialdi
http://www.iamraf.net
Weblog:
http://blogs.ugidotnet.org/raffaele
Microsoft MVP profile
https://mvp.support.microsoft.com/profile/raffaele
UGIdotNET -
http://www.ugidotnet.org/


title: Sospendere un thread

text:
Ciao Raf,
On 3/23/2011 4:30 PM, Raffaele Rialdi [MVP] wrote:
> Non temere dregradi, va benissimo usare gli eventi.
Ottimo.
Il problema è che le "dimensioni" del mio problema lasciano presagire un
imminente proliferare di thread... :-/
> Se l'evento è locale al tuo processo, puoi usare la versione Slim che
> probabilmente ricorderai dalla mia sessione.
Si, l'evento è localissimo. :-)
BTW: ma *dove* si trovano 'ste benedette parallel libraries? In quale
assembly/namespace?
> Inoltre ti suggerisco caldamente di usare WaitHandle.WaitAny
> specificando un array di handle:
> - il primo handle è un altro evento, di quit, per poter chiudere
> 'gracefully' il thread nel caso l'utente voglia interrompere tutto
> - il secondo è quello che ti serve come waiter (quello che hai postato).
  Già fatto. :-)
Ciao,
Giulio
--


title: Sospendere un thread

text:
On 3/23/2011 4:56 PM, Giulio Petrucci wrote:
> BTW: ma *dove* si trovano 'ste benedette parallel libraries? In quale
> assembly/namespace?
Trovate! :-)
Era il "Task" che mi sfuggiva (e visto che sto lavorando sul fx3.5
l'intellisense non mi aiutava nemmeno... :-)).
Ciao,
Giulio
--


title: Sospendere un thread

text:

okappa.... usa fx 4.0 se puoi perché è una rivoluzione :)
diversamente, e se proprio non puoi fare diversamente, leggi qui come
procurarti una versione unsupported:
http://blogs.msdn.com/b/pfxteam/archive/2009/11/19/9925951.aspx
Se usi i task puoi evitare il proliferare inutile di thread che
appesantirebbero la macchina senza dare effettivi vantaggi.
Come dicevo l'altro giorno:
- se ogni task è grossomodo sotto i 500ms puoi lasciare lo scheduler di
default e creare un task per ogni 'unit of work'
- se il task può impiegare più tempo, il meccanismo automatico di
starving detection farebbe partire più thread di quelli effettivamente
necessari. Di conseguenza puoi risolvere in uno di questi modi:
 * SetMaxThreads per evitare di andare oltre una soglia da te
stabilita. Questo però impatta su tutto il thread pool del tuo
processo. Per capirci non farlo mai dentro
asp.net
 * Scheduler custom. Abbastanza semplice da scrivere e puoi decidere tu
la logica che preferisci per lanciare nuovi thread
In ogni caso pensare a 'task' è vitale per strutturare in modo organico
la logica multithreading.



title: Sospendere un thread

text:
Ciao Raf,
grazie della risposta.
On 3/23/2011 5:18 PM, Raffaele Rialdi [MVP] wrote:
> okappa.... usa fx 4.0 se puoi perché è una rivoluzione :)
Si, in azienda ormai siamo migrati al 100% (praticamente).
Il problema è che per questo particolare progetto sono ancora ancorato
al 3.5. :-)
> Se usi i task puoi evitare il proliferare inutile di thread che
> appesantirebbero la macchina senza dare effettivi vantaggi.
Got it.
> Come dicevo l'altro giorno:
> - se ogni task è grossomodo sotto i 500ms puoi lasciare lo scheduler di
> default e creare un task per ogni 'unit of work'
Il problema è che i miei task possono avere durata anche di 10 minuti! :-)
Ti spiego qual è il problema "generale" così magari mi puoi/potete dare
qualche parere più mirato. Ho un demone che gira sempre (ultimamente ho
sempre a che fare con questa roba :-p), ogni tanto carica da una rubrica
delle schede di alcuni dipendenti e per ognuna di queste lancia il
seguente job:
- prende il numero di telefono del dipendente
- mandagli un SMS
Alla ricezione del SMS, il dipendente apre la sua applicazione
Acme.MyApp e preme un bottoncino "Sms ricevuto". La pressione del
bottoncino scrive qualcosa su un database del server dove gira il demone.
Il problema sta tutto qui: l'oggetto che rappresenta il Job deve
rimanere "su" finché nn rileva "tramite polling" una variazione dello
stato del db, a meno dell'occorrenza di un certo timeout (partendo
dall'assunto per cui ogni job deve prendere un thread).
Quale può essere una strategia corretta per implementare una cosa del
genere?
Grazie,
Giulio
--


title: Sospendere un thread

text:
Giulio Petrucci wrote:
> Ciao Raf,
>
> grazie della risposta.
prego
> Il problema è che i miei task possono avere durata anche di 10 minuti! :-)
> Ti spiego qual è il problema "generale" così magari mi puoi/potete dare
> qualche parere più mirato. Ho un demone che gira sempre (ultimamente ho
> sempre a che fare con questa roba :-p), ogni tanto carica da una rubrica
> delle schede di alcuni dipendenti e per ognuna di queste lancia il seguente
> job:
> - prende il numero di telefono del dipendente
> - mandagli un SMS
>
> Alla ricezione del SMS, il dipendente apre la sua applicazione Acme.MyApp e
> preme un bottoncino "Sms ricevuto". La pressione del bottoncino scrive
> qualcosa su un database del server dove gira il demone.
>
> Il problema sta tutto qui: l'oggetto che rappresenta il Job deve rimanere
> "su" finché nn rileva "tramite polling" una variazione dello stato del db, a
> meno dell'occorrenza di un certo timeout (partendo dall'assunto per cui ogni
> job deve prendere un thread).
[...]
Invece di far rimanere su un task per ogni sms, io farei girare un
thread secco che fa polling di qualsaisi risposta agli sms.
Facendo una query sul db puoi facilmente vedere quali sono gli sms che
hanno avuto una risposta ma che non sono ancora stati processati.
Li peschi in blocco, li iteri (magari ce n'è uno solo), e infine li
smisti a chi li deve processare.
Ciao



title: Sospendere un thread

text:
Il 23/03/2011 17:18, Raffaele Rialdi [MVP] ha scritto:
> Giulio Petrucci wrote:
>> On 3/23/2011 4:56 PM, Giulio Petrucci wrote:
CUT
>
> okappa.... usa fx 4.0 se puoi perché è una rivoluzione :)
ardisco intromettermi in un 3D fuor della mia portata,
inquieto per la suddetta dichiarazione ... in che senso
rivoluzione ? Codice scritto per i framework precedenti deve
essere riscritto ? Cambia la struttura dei namespace e
simili ? O soltanto vengono aggiunte funzionalità e/o
migliorate le performance ?
ciao
Soviet



title: Sospendere un thread

text:
Soviet_Mario wrote:
>> okappa.... usa fx 4.0 se puoi perché è una rivoluzione :)
>
> ardisco intromettermi in un 3D fuor della mia portata, inquieto per la
> suddetta dichiarazione ... in che senso rivoluzione ? Codice scritto per i
> framework precedenti deve essere riscritto ? Cambia la struttura dei
> namespace e simili ? O soltanto vengono aggiunte funzionalità e/o migliorate
> le performance ?
no, no ferma :)
La compatibilità con le tecnologie precedenti c'è tutta.
Ci sono alcune cose (per esempio workflow foundation) che sono state
riscritte ed è caldamente suggerito di passare alle novità (ma le
vecchie funzionano come prima).
Quelle a cui alludevo sono le novità, soprattutto per quanto riguarda
il topic in oggetto.
Le nuove parallel libraries sono di fontamentale importanza e hanno un
approccio radicalmente diverso (rivoluzionario) rispetto a quanto si è
sempre fatto lavorando direttamente con i thread.
E poi le novità nel linguaggio, in wcf, wpf, .... insomma tutte novità
che possono veramente farti scrivere parecchio codice in meno.



title: Sospendere un thread

text:
Ciao Raf,
On 3/23/2011 9:28 PM, Raffaele Rialdi [MVP] wrote:
> Invece di far rimanere su un task per ogni sms, io farei girare un
> thread secco che fa polling di qualsaisi risposta agli sms.
Ci credi se ti dico che stavo muovendo verso questa soluzione proprio ora?
:-D
Ciao,
Giulio
--


title: Sospendere un thread

text:
Giulio Petrucci wrote:
>> Invece di far rimanere su un task per ogni sms, io farei girare un
>> thread secco che fa polling di qualsaisi risposta agli sms.
>
> Ci credi se ti dico che stavo muovendo verso questa soluzione proprio ora?
> :-D
Ottimo :)



title: Aggiungere un separatore in una ComboBox WPF in binding

text:
Ho una comboxbox in WPF in binding con una ObservableCollection<A> esposta dal mio ViewModel.

Quello che vorrei fare e' manualmente inserire un separatore prima dell'ultimo elemento.

L'utente dovrebbe vedere:

Elemento1
Elemento2
Elemento3
--------
None

Ho trovato qualche risorsa online ma vorrei sapere se qualcuno di voi ha mai affrontato il problema e se magari ha trovato una soluzione elegante ad esso.

Grazie


text:

In una situazione simile (un treeview con un'ultima foglia per ogni
livello dedicata a un nodo di "inserimento") ho fatto in modo che il
binding degli items dell'albero (tramite itemsSource) fosse fatto su una
property "Children" che contempla anche la presenza del nodo di
inserimento, mentre i veri elementi (i tuoi Elemento1..3) fossero dei
viewmodel di livello inferiore. Per chiarire:

Albero <-> Children (property di AlberoViewModel)
|_Nodo <-> child === ElementViewModel con Element1 come Model
|_Nodo <-> child === ElementViewModel con Element2 come Model
|_Nodo <-> child === ElementViewModel con Element3 come Model
|_"..." <-> child === ElementViewModel con null come Model

NB: di solito uso UN viewmodel per il contenitore (quindi effettivamente
il "model" della "view") e TANTI viewmodels QUANTI sono i tipi di nodo
diverso da mostrare (per esempio, ogni livello gerarchico per me è da
mostrare con icone diverse, o templates diversi)

Non so se può essere una buona soluzione, a me funziona


title: Chiamata a c# da codice nativo

author: Walser

text:
Ciao a tutti,
per evitare di utilizzare GSOAP all'interno
di un'applicazione nativa vorrei chiamare codice .net per
poter effettuare chiamate ad un web services.
Fino ad ora sono riuscito nell'intento di chiamare una
semplice class library c# da codice nativo usando un wrapper
c++/cli usando il seguente schema :
codice unmanaged > dllWrapper unmanaged/managed > ClassLibrary managed
appena aggiungo all'interno della classe c# il riferimento al
WebService service usando WCF
             ServizioProva.Service1Client ser = new ServizioProva.Service1Client();
il programma esce con un'eccezione.
Stessa cosa se tento di usare LINQ mentre se uso un dataset per
accedere a SQL funziona tutto.
Dove sbaglio?
Grazie Luca


title: Chiamata a c# da codice nativo

text:
Walser wrote:
> il programma esce con un'eccezione.
Quale?
--
Raffaele Rialdi
http://www.iamraf.net
Weblog:
http://blogs.ugidotnet.org/raffaele
Microsoft MVP profile
https://mvp.support.microsoft.com/profile/raffaele
UGIdotNET -
http://www.ugidotnet.org/


title: Chiamata a c# da codice nativo

text:
Raffaele Rialdi [MVP] ha scritto, Il 06/04/2011 17:45:
> Walser wrote:
>> il programma esce con un'eccezione.
>
> Quale?
>
Eccezione non gestita a 0x75d0b727 in StandardC.exe: 0xE0434352: 0xe0434352.
Non è disponibile il sorgente e lo stack è il seguente :
 >	KernelBase.dll!75d0b727()
  	[I frame indicati di seguito possono essere errati e/o mancanti, non sono stati caricati simboli per KernelBase.dll]
  	KernelBase.dll!75d0b727()
  	System.ServiceModel.ni.dll!06c7be75()
  	System.ServiceModel.ni.dll!0610c369()
  	System.ServiceModel.ni.dll!0699d4e1()
  	clr.dll!5fbf2142()
  	00de0882()
  	005e9090()
Luca


title: Chiamata a c# da codice nativo

text:

Purtroppo non è molto, bisognerebbe guardare più a fondo con windbg.
Visto così sembra però un problema sul marshalling del tuo wrapper.
Assicurati che i parametri che passi a C# vengano effettivamente
copiati correttamente nella memoria managed e che non siano più
toccati.
Quello che temo è che stai vedendo gli effetti di corruzione della
memoria perché il codice nativo va a scrivere zone di memoria 'managed'
che il GC sta spostando. Se da codice nativo vuoi scrivere nella
memoria managed, dovrai fare il pinning della zona di memoria e poi
rilasciarlo una volta che il codice nativo ha finito il suo lavoro.
Dire di più è difficile vista l'esigua informazione ...



title: Chiamata a c# da codice nativo

text:
Ciao,
Raffaele Rialdi [MVP] ha scritto, Il 07/04/2011 00:16:
> Walser wrote:
[snip]
>
> Purtroppo non è molto, bisognerebbe guardare più a fondo con windbg.
> Visto così sembra però un problema sul marshalling del tuo wrapper.
>
> Assicurati che i parametri che passi a C# vengano effettivamente copiati correttamente nella memoria managed e che non siano più toccati.
> Quello che temo è che stai vedendo gli effetti di corruzione della memoria perché il codice nativo va a scrivere zone di memoria 'managed' che il GC sta spostando. Se da codice nativo vuoi scrivere nella memoria managed, dovrai fare il pinning della zona di memoria e poi rilasciarlo una volta che il codice nativo ha finito il suo lavoro.
>
> Dire di più è difficile vista l'esigua informazione ...
>
ho controllato ma essendo veramente un giocattolo per
fare delle prove di fattibilità non credo dipenda da quello.
Grazie per l'interessamento se può aiutare i
sorgenti sono i seguenti :
Console application :
// StandardC.cpp : definisce il punto di ingresso dell'applicazione console.
//
#include "stdafx.h"
#include "..\DllWrapper\DllWrapper.h"
#include <conio.h>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    char Date[200];
    int i;
    GetData ( Date, &i );
    printf ( "\nNumero <%d>", i );
    printf ( "\nData : <%s>", Date );
    printf ( "\nPremere un tasto per terminare..." );
    getch();
	return 0;
}
Dll wrapper :
// DllWrapper.cpp: definisce le funzioni esportate per l'applicazione DLL.
//
#include "stdafx.h"
#include "DllWrapper.h"
// Utilities for Native<>CLI conversions
#include <vcclr.h>
using namespace System;
using namespace Runtime::InteropServices;
using namespace SampleClass;
#pragma unmanaged
int NATIVEDLL_API GetData ( char *D, int *i )
{
    tstring Data;
    int Numero;
    CClass1 classe;
    Numero = classe.Get_Number();
    *i = Numero;
    Data = classe.GetDateTime();
    WideCharToMultiByte(CP_UTF8, 0, Data.c_str(), -1, (char *)D, 100, NULL, NULL);
    classe.~CClass1();
    return ( 0 );
}
#pragma managed
CClass1::CClass1()
{
    Class1^ class1 = gcnew Class1();
    // Managed type conversion into unmanaged pointer is not allowed unless
    // we use "gcroot<>" wrapper.
    gcroot<Class1^> *pp = new gcroot<Class1^>(class1);
    this->m_pClass1CLR = (void*)pp;
}
CClass1::~CClass1()
{
    if (this->m_pClass1CLR)
    {
       // Get the CLR handle wrapper
       gcroot<Class1^> *pp = reinterpret_cast<gcroot<Class1^>*>(this->m_pClass1CLR);
       this->m_pClass1CLR = 0;
       // Delete the wrapper; this will release the underlying CLR instance
       delete pp;
    }
}
tstring CClass1::GetDateTime() const
{
    tstring strDate;
    if (this->m_pClass1CLR != 0)
    {
       // Get the CLR handle wrapper
       gcroot<Class1^> *pp = reinterpret_cast<gcroot<Class1^>*>(this->m_pClass1CLR);
       // Convert to std::string
       // Note:
       // - Marshaling is mandatory
       // - Do not forget to get the string pointer...
       strDate = (const TCHAR*)Marshal::StringToHGlobalAuto( ( (Class1^)*pp)->GetDateTime()).ToPointer();
    }
    return strDate;
}
int CClass1::Get_Number ( ) const
{
    if (this->m_pClass1CLR != 0)
    {
       // Get the CLR handle wrapper
       gcroot<Class1^> *pp = reinterpret_cast<gcroot<Class1^>*>(this->m_pClass1CLR);
       // Convert to std::string
       // Note:
       // - Marshaling is mandatory
       // - Do not forget to get the string pointer...
       return ((Class1^)*pp)->GetNumero;
    }
    return ( 0 );
}
e classe c# :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using System.Data;
using System.Data.SqlClient;
namespace SampleClass
{
     public class Class1
     {
         public int Numero;
         public string data;
         ~Class1()
         {
             Console.WriteLine("\nEsco");
         }
         public Class1 ()
         {
             Numero = 10;
         }
         public string GetDateTime ( )
         {
             // Anche solo se definisco la classe per l'accesso al
             // servizio il problema si presenta.
--->>>      ServizioProva.Service1Client ser = new ServizioProva.Service1Client();
             //servizio.Open();
             //data = servizio.DoWork();
             //servizio.Close();
             data = DateTime.Now.ToString();
             return (data);
         }
         public int GetNumero
         {
             get
             {
                 return (Numero);
             }
         }
     }
}
Luca


title: Chiamata a c# da codice nativo

text:
Walser wrote:
> ho controllato ma essendo veramente un giocattolo per
> fare delle prove di fattibilità non credo dipenda da quello.
1. Usa solo progetti VC++ di tipo Unicode.
Lavorare in ansi con VC++ non ha senso da più di 15 anni e aumenta
inutilmente la complessità, soprattutto quando hai del marshalling
verso il framework che è solo Unicode.
2. Non devi chiamare il distruttore in modo esplicito. Il distruttore
viene chiamato dal runtime di vc++ non appena la variable esce dallo
scope (o se usi un ptr quando nei fai la delete).
3. Stai scrivendo codice C e non C++. Non usare i puntatori se non
quando è strettamente indispensabile. Usa smart pointer, classi, etc.
Leggi i libri di Stroustrup, Sutter e Alexandrescu per avere dei punti
di riferimento.
4. Il distruttore in C# è in realtà la Finalize e non è deterministico
perciò devi evitarlo come la peste (non serve per scaricare memoria o
oggetti ma solo risorse native come gli handle). Auto_GCRoot ti evita
le rogne di chiamare la Dispose se la tua classe Managed implementa
IDisposable.
5. Se referenzi un WS devi creare il tuo Main.Exe.config in modo che
contenga la configurazione di wcf, altrimenti va in eccezione
6. Per debuggare devi specificare nelle property del progetto C++
nativo che il debugger è mixed, altrimenti non puoi andare step by
step.
7. se vuoi invocare un web service wcf da codice nativo esiste un
percorso più diretto.
Ci sono infatti i Windows Web Services (WWS) nativi a partire da
Windows 7 che permettono di invocare servizi WS-* da C/C++.
Dovrebbe esserci ancora un mio webcast su msdn che mostra rapidamente
come fare.
Il codice del wrapper è piuttosto ingarbugliato, per cui faccio prima a
scriverti qualche riga di codice.
=== Console nativa pura C++ ===
#include "stdafx.h"
#include "..\Wrapper\Wrapper.h"
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    wstring Date;
    int i;
    GetData( Date, i );
    wcout << endl << L"Numero " << i;
    wcout << endl << L"Data " << Date;
    wcout << endl << L"\nPremere un tasto per terminare...";
	cin.get();
	return 0;
}
=== DLL mixed C++ compilata con /clr ===
// Wrapper.h
#pragma once
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int GetData ( wstring &date, int &i );
// Wrapper.Cpp
#include "stdafx.h"
#include <msclr\gcroot.h>
#include <msclr\marshal_cppstd.h>
using namespace msclr;
using namespace msclr::interop;
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
using namespace System;
using namespace Runtime::InteropServices;
using namespace CSLibrary;
class SmallWrapper
{
private:
	gcroot<ManagedClass^> mc;
public:
	SmallWrapper()
	{
		mc = gcnew ManagedClass();
	}
	wstring GetDateTime()
	{
		System::String ^temp = mc->GetDateTime().ToString();
		wstring result = marshal_as<wstring>(temp);
		return result;
	}
	int GetNumero()
	{
		return mc->Numero;
	}
};
int GetData ( wstring &date, int &i )
{
	SmallWrapper wrapper;
	date = wrapper.GetDateTime();
	i = wrapper.GetNumero();
	return 0;
}
=== DLL C# che invoca un web service ===
using System;
using System.Diagnostics;
namespace CSLibrary
{
	public class ManagedClass
	{
		Random rnd = new Random((int)DateTime.Now.Ticks);
		public DateTime GetDateTime()
		{
			var client = new ServiceReference1.Service1Client();
			Debug.WriteLine(client.GetData(10));
			Numero = rnd.Next();
			return DateTime.Now;
		}
		public int Numero {get; set;}
	}
}
Diciamo che questo è uno strappo alla regola perché non è che mi metto
a scrivere codice per ogni post sul ng, altrimenti non faccio altro :)



title: Chiamata a c# da codice nativo

text:
Ciao,
ti ringrazio per l'interessamento studierò con
attenzione le risorse da te indicate e farò sapere al ng
i risultati ottenuti.
Il problema è che devo costruire una dll "bridge" fra il mondo
unmanaged c ansi e il mondo "nuovo" in quanto si tratta di
un'applicazione, si vecchia ma con un numero enorme di
installazioni, per cui dobbiamo utilizzare questa base ed
aumentare le possibilità lavorando ai "fianchi" della
"business logic" principale.
Almeno fino alla sostituzione della parte principale.
 > 7. se vuoi invocare un web service wcf da codice nativo
 > esiste un percorso più diretto.
 > Ci sono infatti i Windows Web Services (WWS) nativi a partire da Windows 7
 > che permettono di invocare servizi WS-* da C/C++.
 > Dovrebbe esserci ancora un mio webcast su msdn che mostra rapidamente come fare.
Al momento ho quasi tutte le installazioni che sono con windows
xp embedded :( e questo mi limita nella scelta delle
alternative ma non mancherò di studiare questa possibilità.
Grazie mille delle dritte :)
Luca
P.S. Mi ritengo per il momento un programmatore C, anche se
sto studiando, molto, per l'utilizzo di .NET.



title: Chiamata a c# da codice nativo

text:
Walser wrote:
> Ciao,
> ti ringrazio per l'interessamento studierò con
> attenzione le risorse da te indicate e farò sapere al ng
> i risultati ottenuti.
> Il problema è che devo costruire una dll "bridge" fra il mondo
> unmanaged c ansi e il mondo "nuovo" in quanto si tratta di
> un'applicazione, si vecchia ma con un numero enorme di
> installazioni, per cui dobbiamo utilizzare questa base ed
> aumentare le possibilità lavorando ai "fianchi" della
> "business logic" principale.
> Almeno fino alla sostituzione della parte principale.
Quanto ho scritto va molto oltre alla semplice indicazione :)
Se la app vecchia usa quello stile di C++ ti consiglio caldamente di
riscriverla da zero. Non lo dico per spaventarti ma per avvertirti dei
potenziali grossi problemi, non ultimo quella di sicurezza.
>
>  > 7. se vuoi invocare un web service wcf da codice nativo
>  > esiste un percorso più diretto.
>  > Ci sono infatti i Windows Web Services (WWS) nativi a partire da Windows 7
>  > che permettono di invocare servizi WS-* da C/C++.
>  > Dovrebbe esserci ancora un mio webcast su msdn che mostra rapidamente come
>  > fare.
>
> Al momento ho quasi tutte le installazioni che sono con windows
> xp embedded :( e questo mi limita nella scelta delle
> alternative ma non mancherò di studiare questa possibilità.
>
> Grazie mille delle dritte :)
prego
>
> Luca
>
> P.S. Mi ritengo per il momento un programmatore C, anche se
> sto studiando, molto, per l'utilizzo di .NET.
Ottimo, buono studio allora



title: [WPF] Mouse Control Events che scompaiono

text:
Ciao a tutti,
ï¿œ possibile che il problema che vi sto descrivendo sia dovuto alla mia
applicazione, ma dopo mezza giornata di analisi ho il sospetto che sto
utilizzando risorse di cui non capisco pienamente il funzionamento...
Ho un TreeView in cui vorrei intercettare il doppio click su di un nodo.
Avrei voluto usare il Control.MouseDown o il Control.MouseLeftButtonDown
per poter poi contare i ClickCount e poter settare o resettare una mia
Property HasBeenDoubleClicked nel gestore dell'evento, ma questi due
vengono gestiti da qualche altra parte e "me li perdo", ipotizzo che il
componente treeview imposti qualche Handled = true da qualche parte
(anche se mi sembra cosï¿œ strano!)
Stranamente mi funziona il MouseDoubleClick, ma questo mi costringe a
far resettare la property al suo utilizzatore, cosa francamente orripilante.
Altro indizio: il gestore del mousedown event viene usato se utilizzo il
tasto centrale. Cosa succede secondo voi?


text:
Il 04/02/2011 09:48, marcosabba ha scritto:
> Ciao a tutti,
> ï¿œ possibile che il problema che vi sto descrivendo sia dovuto alla mia
> applicazione, ma dopo mezza giornata di analisi ho il sospetto che sto
> utilizzando risorse di cui non capisco pienamente il funzionamento...
Chiedo venia, dopo un altro quarto di giornata ho trovato, l'evento era
giï¿œ stato catturato e "consumato" da un altro command che ieri non avevo
trovato... scusate davvero per il post inutile.


title: servizio windows per monitoraggio stampante

author: claudioBarbera

text:
Salve a tutti.
Dovrei realizzare un servizio windows che catturi alcuni dati relativi
all'utente windows loggato e alla data di stampa quando l'utente manda
in stampa un file per poterli memorizzare in un db.
Posso farlo con .net?
Potete indirizzarmi verso la soluzione più corretta?


text:

Io partirei dalla api
FindFirstPrinterChangeNotification e FindNextPrinterChangeNotification
http://msdn.microsoft.com/en-us/library/dd162722(v=vs.85).aspx
--
Raffaele Rialdi
http://www.iamraf.net
Weblog:
http://blogs.ugidotnet.org/raffaele
Microsoft MVP profile
https://mvp.support.microsoft.com/profile/raffaele
UGIdotNET -
http://www.ugidotnet.org/


text:

Ho letto da qualche parte che non posso gestire l'operazione con un
servizio windows. è vero?


text:
claudioBarbera wrote:
> Ho letto da qualche parte che non posso gestire l'operazione con un
> servizio windows. è vero?
I servizi girano in un altra sessione rispetto agli utenti.
In particolare a partire da Vista in poi, la sessione 0 è quella usata
dai servizi mentre le altre sessioni sono usate dagli utenti loggati
localmente o da remote desktop.
Questo significa che dal servizio puoi enumerare le sessioni e trovare
nessuna o più sessioni con uno o più utenti collegati (il che dipende
anche dalla versione di windows che ti consente di avere uno o più
utenti in remote desktop).
Detto questo l'attività sulla stampante con quelle api è notificata
comunque e infatti nei dati ricevi anche il nome utente responsabile
del cambiamento notificato.
A cosa ti riferisci quando dici "non posso gestire l'operazione"?
--
Raffaele Rialdi
http://www.iamraf.net
Weblog:
http://blogs.ugidotnet.org/raffaele



text:

> Microsoft MVP profilehttps://
mvp.support.microsoft.com/profile/raffaele
> UGIdotNET -
http://www.ugidotnet.org/
Nel senso che dovrei fare un "hook".. agganciarmi per ricevere i
messaggi che vengono mandati da windows


text:
claudioBarbera wrote:
> Nel senso che dovrei fare un "hook".. agganciarmi per ricevere i
> messaggi che vengono mandati da windows
Quelle API che ti ho linkato sono degli hook a tutti gli effetti.
Con quelle di fatto sottoscrivi una richiesta a Windows di ricevere
delle notifiche ogni volta che "qualcosa" cambia nello spooler.
Il "qualcosa" può andare da un nuovo job al cambio di stato della
stampante, alla rimozione della stampante, etc. etc.
--
Raffaele Rialdi
http://www.iamraf.net
Weblog:
http://blogs.ugidotnet.org/raffaele



text:
On 5 Mag, 12:34, Raffaele Rialdi [MVP] <
malta@n0spam_vevy.com
> wrote:
> claudioBarbera wrote:
> > Nel senso che dovrei fare un "hook".. agganciarmi per ricevere i
> > messaggi che vengono mandati da windows
>
> Quelle API che ti ho linkato sono degli hook a tutti gli effetti.
> Con quelle di fatto sottoscrivi una richiesta a Windows di ricevere
> delle notifiche ogni volta che "qualcosa" cambia nello spooler.
> Il "qualcosa" può andare da un nuovo job al cambio di stato della
> stampante, alla rimozione della stampante, etc. etc.
>
> --
> Raffaele Rialdi
http://www.iamraf.net
> Weblog:
http://blogs.ugidotnet.org/raffaele
> Microsoft MVP profilehttps://
mvp.support.microsoft.com/profile/raffaele
> UGIdotNET -
http://www.ugidotnet.org/
Si, ho visto, è fattibile. Non riesco ad estrarre però il numero di
pagine del documento che viene inviato alla stampante e non trovo la
API relativa.. puoi aiutarmi?


text:
claudioBarbera wrote:
> Si, ho visto, è fattibile. Non riesco ad estrarre però il numero di
> pagine del documento che viene inviato alla stampante e non trovo la
> API relativa.. puoi aiutarmi?
A occhio direi che devi usare OpenPrinter + GetJob facendoti dare una
JOB_INFO_2 che contiene il numero di pagine.
Occhio a ricordarti di chiudere *tutti* gli handle che apri, altrimenti
il tuo servizio alla lunga andrà ad esaurire tutti gli handle con
conseguente necessità di rebootare (e anche di mandare in crash qualche
app che non riesce più a creare oggetti a causa della mancanza di
handle).
http://msdn.microsoft.com/en-us/library/dd144894(v=VS.85).aspx
--
Raffaele Rialdi
http://www.iamraf.net
Weblog:
http://blogs.ugidotnet.org/raffaele



title: TimeZoneInfo id del browser

author: Daigoro

text:
Ciao a tutti,
avrei la necessità di intercettare l'id del fuso orario locale del browser
che si collega al mio sito (TimeZoneInfo.id), è possibile farlo?
Grazie a tutti
Ciao
Alberto


title: Metodo per uso query linq con sub comune

author: BlackSun

text:
Ciao,
supponiamo che debba estrarre dei dati da query linq diverse ma che il
metodo per stampare i dati sia sempre lo stesso quindi:
Dim query1 = From......
Dim query2 = From......
Stampa(query1)
Stampa(query2)
Come fareste?
Grazie mille
Ciao BlackSun


text:

Innanzitutto le query saranno certamente di tipo IEnumerable<qualcosaX>
La definizione di "qualcosa" sta a te: può essere una classe base
(magari astratta) o un'interfaccia. In entrambi i casi avrai dei tipi
concreti (qualcosa1, qualcosa2, ..., qualcosaX) che rappresentano i
dati.
Vb.net 4 supporta la covarianza, quindi è possibile passare un
IEnumerable<base> a una funzione che si aspetta IEnumerable<derivata>
--
Raffaele Rialdi
http://www.iamraf.net
Weblog:
http://blogs.ugidotnet.org/raffaele
Microsoft MVP profile
https://mvp.support.microsoft.com/profile/raffaele
UGIdotNET -
http://www.ugidotnet.org/


text:
Ciao,
si.. mi sono dimenticato di aggiungere un pezzo cioe' che le query
sono IEnumerable di tipo anonimo.
E' proprio qui che mi areno in quanto non so come passare il tipo
anonimo come parametro; ho provato con Private Sub Prova(ByVal query
As IEnumerable) ma poi quando leggo la query (For Each xxxx In query)
mi chiede il cast.
Grazie mille
Ciao BlackSun
> Innanzitutto le query saranno certamente di tipo IEnumerable<qualcosaX>
> La definizione di "qualcosa" sta a te: pu essere una classe base
> (magari astratta) o un'interfaccia. In entrambi i casi avrai dei tipi
> concreti (qualcosa1, qualcosa2, ..., qualcosaX) che rappresentano i
> dati.
>
> Vb.net 4 supporta la covarianza, quindi possibile passare un



text:
BlackSun wrote:
> Ciao,
> si.. mi sono dimenticato di aggiungere un pezzo cioe' che le query
> sono IEnumerable di tipo anonimo.
> E' proprio qui che mi areno in quanto non so come passare il tipo
> anonimo come parametro; ho provato con Private Sub Prova(ByVal query
> As IEnumerable) ma poi quando leggo la query (For Each xxxx In query)
> mi chiede il cast.
È inevitabile, essendo anonimo non puoi consoscere com'è fatto e quindi
non puoi avere lo strong-typing.
Ti conviene dichiarare creare una classe o una gerarchia di classi e
usarle al posto del tipo anonimo.
Potresti bypassare il problema ma a me non piace affatto.
Le specifiche degli anonymous type infatti dicono che se il tipo
anonimo contiene esattamente gli stessi membri (stesso nome e tipo)
allora verrà riutilizzato lo stesso anonymous type già creato
precedentemente.
Quindi potresti crearti un anon type con le stesse caratteristiche e
poi farci un cast sopra.
Mi fermerei qui visto che la conoscenza dell'anonymous type all'esterno
in pratica rende tutto lo sforzo vano. Tantovale definire un nuovo type
e usare quello.
--
Raffaele Rialdi
http://www.iamraf.net
Weblog:
http://blogs.ugidotnet.org/raffaele



text:
Ciao,
> inevitabile, essendo anonimo non puoi consoscere com' fatto e quindi
> non puoi avere lo strong-typing.
Gia' :-((((
> Ti conviene dichiarare creare una classe o una gerarchia di classi e
> usarle al posto del tipo anonimo.
Mi conviene creare una classe ah hoc solo per queste due query... la
cosa non mi piace molto pero' :-(
Grazie per l'aiuto...
Ciao Blacksun