Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Due mesi di Battlefield 6: dalla campagna al battle royale, è l'FPS che stavamo aspettando
Due mesi di Battlefield 6: dalla campagna al battle royale, è l'FPS che stavamo aspettando
Abbiamo giocato a lungo a Battlefield 6, abbiamo provato tutte le modalità multiplayer, Redsec, e le numerose personalizzazioni. In sintesi, ci siamo concentrati su ogni aspetto del titolo per comprendere al meglio uno degli FPS più ambiziosi della storia dei videogiochi e, dopo quasi due mesi, abbiamo tirato le somme. In questo articolo, condividiamo con voi tutto ciò che è Battlefield 6, un gioco che, a nostro avviso, rappresenta esattamente ciò che questo genere attendeva da tempo
Antigravity A1: drone futuristico per riprese a 360° in 8K con qualche lacuna da colmare
Antigravity A1: drone futuristico per riprese a 360° in 8K con qualche lacuna da colmare
Abbiamo messo alla prova il drone Antigravity A1 capace di riprese in 8K a 360° che permette un reframe in post-produzione ad eliche ferme. Il concetto è molto valido, permette al pilota di concentrarsi sul volo e le manovre in tutta sicurezza e decidere con tutta tranquillità come gestire le riprese. La qualità dei video, tuttavia, ha bisogno di uno step in più per essere competitiva
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator
Dopo oltre 4 anni si rinnova la serie Sony Alpha 7 con la quinta generazione, che porta in dote veramente tante novità a partire dai 30fps e dal nuovo sensore partially stacked da 33Mpixel. L'abbiamo provata per un breve periodo, ecco come è andata dopo averla messa alle strette.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 05-05-2009, 16:46   #1
cyberfido
Junior Member
 
Iscritto dal: Jul 2008
Messaggi: 17
[C#] Esecuzione con o senza tapi

Ciao a tutti,
è la prima volta che scrivo in questa sezione, spero di rispettare tutte le regole.
Ho un problema, che non riesco a spiegarmi.
Sto sviluppando un programma per la gestione delle tapi.
Ho fatto una dll wrapper per la gestione delle tapi che funziona ( già testata con altre applicazioni).
In questa dll ho una funziona che mi restituisce il numero del chiamante sul pc.
La comunicazione tra dll e programma avviene tramite delegato, se serve poi specifico, comunque sappiate che alla funzione sotto, denominata search, che si occupa di trovarmi i dati della persona associata al numero, arriva l'effettivo numero del chiamante.
la funzione search è questa
Codice:
 public void search(string pcaller)
        {
            //dichiarazioni
            //query 
            this.lbl_name.Text = lib.tostring(ldb.db_read("name"));
            this.lbl_surname.Text = lib.tostring(ldb.db_read("cognome"));
            this.lbl_address.Text = lib.tostring(ldb.db_read("indirizzo") + " - " + ldb.db_read("cap") + " - " + ldb.db_read("localita"));
            this.lbl_tel.Text = lib.tostring(ldb.db_read("tel"));
            this.lbl_tel2.Text = lib.tostring(ldb.db_read("tel2"));
            this.lbl_ssn.Text = lib.tostring(ldb.db_read("ssn"));
            this.lbl_cf.Text = lib.tostring(ldb.db_read("cod_fiscale"));
            this.lbl_asl.Text = lib.tostring(ldb.db_read("ragione_sociale"));
            this.lbl_distr.Text = lib.tostring(ldb.db_read("nome_distretto"));
        }
Quale è il problema?
Il problema è che se eseguo il programma e faccio delle prove di chiamata, quando arrivo alla riga
Codice:
this.lbl_name.Text = lib.tostring(ldb.db_read("name"));
il programma si ferma e non mi arriva alla seguente riga, non si blocca, anzi, pare proprio aver ignorato tutto il resto delle operazioni. naturalmente non esegure la riga indicata.
la cosa strana è che se eseguo la funzione in modo statico, ad esempio inserendo un bottone nel form e passandogli un numero di telefono voluto, in maniera statica, il metodo funziona ed esegue tutto alla perfezione.

Spero di essermi spiegato con successo.
In caso contrario chiedete.
Secondo voi dove sta il problema?
Grazie mille e in anticipo a chiunque riesca a rispondermi.
cyb
cyberfido è offline   Rispondi citando il messaggio o parte di esso
Old 05-05-2009, 17:24   #2
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Metti sotto try-catch per vedere una possibile eccezione.
Secondo me stai cercando di aggiornare parti di UI (sono label quelle vero?) da parte di un thread che non e' quella della finestra ospite.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 05-05-2009, 18:00   #3
cyberfido
Junior Member
 
Iscritto dal: Jul 2008
Messaggi: 17
ciao e grazie per ora!
sì sono label!
ho messo sotto try catch e mi dice
"Operazione cross-thread non valida: è stato eseguito l'accesso al controllo 'lbl_name' da un thread diverso da quello da cui è stata eseguita la creazione."

come posso risolvere questo problema?
cyberfido è offline   Rispondi citando il messaggio o parte di esso
Old 05-05-2009, 19:42   #4
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da cyberfido Guarda i messaggi
ciao e grazie per ora!
sì sono label!
ho messo sotto try catch e mi dice
"Operazione cross-thread non valida: è stato eseguito l'accesso al controllo 'lbl_name' da un thread diverso da quello da cui è stata eseguita la creazione."

come posso risolvere questo problema?
Esattamente come pensavo.
Quindi per risolvere devi fare in modo che le operazioni di UI vengano eseguite nel thread della finestra.
Abbiamo gia' scritto piu' volte nel forum una soluzione per questo problema (ce ne sono diverse), ma non mi ricordo proprio i thread...
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2009, 00:45   #5
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da cyberfido Guarda i messaggi
Ho fatto una dll wrapper per la gestione delle tapi [...]
domanda anti-scemo: ovviamente intendi dire che l'hai autogenerata con tlbimp.exe, vero??
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2009, 09:02   #6
cyberfido
Junior Member
 
Iscritto dal: Jul 2008
Messaggi: 17
Quote:
Originariamente inviato da 71104 Guarda i messaggi
domanda anti-scemo: ovviamente intendi dire che l'hai autogenerata con tlbimp.exe, vero??
intendi dire che se invece di averla generata con tlbimp.exe l'ho fatta da me a manina sono scemo?

allora mi sa che sono scemo.
comunque ho semplicemente importato tapi3.dll nella mia dll e ho integrato le funzioni.

per gugoXX provo a cercare nei thread.
grazie per ora.
cyberfido è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2009, 12:06   #7
cyberfido
Junior Member
 
Iscritto dal: Jul 2008
Messaggi: 17
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
Esattamente come pensavo.
Quindi per risolvere devi fare in modo che le operazioni di UI vengano eseguite nel thread della finestra.
Abbiamo gia' scritto piu' volte nel forum una soluzione per questo problema (ce ne sono diverse), ma non mi ricordo proprio i thread...
gugo ho risolto così.
guardando il tuo suggerimento in questo thread ho fatto così:

dichiarazioni
Codice:
public Thread tapi_thread;
        public delegate void delegatesearch(string pcaller);
nel costruttore:
Codice:
this.tapi_thread = new Thread(new ThreadStart(this.listen));
            this.tapi_thread.Start();
metodo chiamato da thread:
Codice:
public void listen()
        {
            while (this.tapi_thread.ThreadState == ThreadState.Running)
            {
                if (this.tapi.tpc_callinfo == "OFFERING")
                {
                    this.tapi.tpc_callinfo = "";
                    this.search(this.tapi.tpc_caller);
                    //this.tapi_thread.Join(1000);
                }
            }
        }
metodo search:
Codice:
public void search(string pcaller)
        {
            if (this.InvokeRequired)
            {
                this.Invoke(new delegatesearch(search), new object[] { pcaller });
                return;
            } else
            {//corpo del metodo search visto prima
}
grazie mille.

p.s. attendo sempre di sapere se sono stato scemo :P
cyberfido è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2009, 12:18   #8
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Va bene, ma io prefersico sempre separare bene i compiti delle funzioni, soprattutto se magari possono essere riusate
Avrei fatto qualcosa come:

Codice:
// Nella classe Form
public delegate void VoidVoidDelegate();
public void ExecuteInWindowThread(VoidVoidDelegate VoidVoidAction)
{
    if (this.InvokeRequired)    
        this.Invoke(VoidVoidAction);                    
    else
         VoidVoidAction();    
}
In modo tale che, laddove mi servisse richiamare qualcosa nel Thread della finestra, avrei fatto

Codice:
ExecuteInWindowThread(() =>
{
    this.label1.Text = "Una";
    this.label2.Text = "Prova";
});
In questo modo il codice per la sincroniazzazione e' ben separato, e puo' essere riusato da questa Form nel caso in cui ci fossero altri thread che contano di cambiare qualche aspetto della finestra.
Anzi, un metodo simile ce l'ho nella extension library statica delle mie WinForm, cosicche' tutte le mie Form lo ereditano direttamente senza dovere scrivere piu' nulla.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.

Ultima modifica di gugoXX : 06-05-2009 alle 12:24.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2009, 21:53   #9
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da cyberfido Guarda i messaggi
intendi dire che se invece di averla generata con tlbimp.exe l'ho fatta da me a manina sono scemo?


significa che hai reinventato la ruota, ed é una ruota bella grossa direi: hai scritto a mano un tuo layer di interoperabilitá (piuttosto malfunzionante a quanto pare) quando ne esiste giá uno maturo e potente che si chiama COM.

ma quando hai letto le pagine introduttive di TAPI3 non hai letto che COM era tra i requisiti? hai serie lacune



Quote:
allora mi sa che sono scemo.
comunque ho semplicemente importato tapi3.dll nella mia dll e ho integrato le funzioni.
"semplicemente"?
ti spiego una cosa: non hai bisogno di scrivere nessuna DLL ne' di integrare alcunché, TAPI3 lo puoi giá usare tanto in C# quanto in (virtualmente) qualunque altro linguaggio di programmazione.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 07-05-2009, 12:09   #10
cyberfido
Junior Member
 
Iscritto dal: Jul 2008
Messaggi: 17
a parte le faccine delle quali non colgo la provocazione.
d'altronde manco ci conosciamo come ti permetti di rivolgerti a me con questo tono?
avevo messo in conto di prendere offese a chiedere nel forum, visti che di tipi così ce ne sono in giro e ammetto anche le mie lacune serissime visto che sono per l'appunto a chiedere in un forum.
per quanto riguarda le mie tapi, per l'utilizzo che ci faccio, mi funzionano benissimo e grazie ai consigli di gugo sono riuscito ad ultimare anche l'ultima parte di prog che mi mancava.

per ultimo so che TAPI3 posso utilizzarla così come è ( altrimenti come avrei potuto scriverla nella mia dll?)
ma come tutti gli oggetti di base che offre il .net io ci ho costruito sopra le mie estensioni, che utilizzano gli oggetti del .net e li migliorano per gli utilizzi che ci devo fare io, ma questo non penso di dovertelo dire io dal basso della mia ignoranza.

grazie ancora ad entrambi!
buon proseguimento!
cyberfido è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Due mesi di Battlefield 6: dalla campagna al battle royale, è l'FPS che stavamo aspettando Due mesi di Battlefield 6: dalla campagna al bat...
Antigravity A1: drone futuristico per riprese a 360° in 8K con qualche lacuna da colmare Antigravity A1: drone futuristico per riprese a ...
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator Sony Alpha 7 V, anteprima e novità della ...
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1 realme GT 8 Pro Dream Edition: prestazioni da fl...
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum OVHcloud Summit 2025: le novità del cloud...
Malesia, giro di vite sul mining illegal...
Meta rivede la roadmap: visore ultralegg...
Addio ricariche continue con le elettric...
Maxi sconto sul robot del futuro: roboro...
I 3 super TV OLED e QLED crollati su Ama...
Tre notebook fuori di testa in sconto: M...
Sconti iPhone su Amazon: oggi ci sono i ...
Google rende disponibile Gemini 3 Deep T...
I 3 super robot Dreame Aqua10 Roller tor...
Tornano in sconto le scope elettriche Ti...
IA nei videogiochi: anche SEGA la utiliz...
Apple in piena tempesta: anche il boss d...
Due GeForce GTX 580 in SLI: l'insospetta...
TSMC dà i numeri: dal processo N7...
La ricarica wireless dei Samsung Galaxy ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 15:17.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v