Oppure

Loading
03/08/10 17:34
Dyango
ciao ragazzi quale istruzione mi restituisce il numero di processori logici(se è presente l hyperthreading) e quelli fisici dal sistema?
aaa
04/08/10 16:40
Dyango
Questa e la funziona che mi interessa (dopo avere tradotto dal c#):

Public Shared Function GetCpuCores() As Integer
        Try
            Dim searcher As ManagementObjectSearcher = New ManagementObjectSearcher("root\CIMV2", "SELECT * FROM Win32_Processor")
            For Each queryObj As ManagementObject In searcher.Get
                Return Convert.ToInt32(queryObj("NumberOfCores")) 'qui mi sottolinea queryObj
            Next
        Catch e As ManagementException
            Return -1
        End Try
        Return -1
    End Function

pero vs mi sottolinea queryObj dicendo come errore "La classe 'WindowsApplication1.ManagementObject' non può essere indicizzata perché non contiene proprietà predefinite."
come posso risolvere?
aaa
04/08/10 17:15
netarrow
sembra un errore specifico di vb.net (che non conosco).
a giudicare gli altri esempi, potresti provare a fare un ToString sul ManagedObject.
aaa
05/08/10 8:17
Il Totem
Stai cercando di utilizzare una proprietà di default che evidentemente non esiste.

Tu usi queryObj, un oggetto di tipo ManagmentObject, come se fosse un array (o una funziona), il che non è ammissibile, in nessun linguaggio. In .NET, questa sintassi è lecita solo se l'oggetto dispone di una proprietà detta "di default" che viene richiamata con l'argomento passato, in questo caso:
queryObj.DefProperty("NumberOfCores")

Ma evidentemente non esiste alcuna proprietà del genere. Devi documentarti:
msdn.microsoft.com/it-it/library/…
A mio parere, dovresti usare la proprietà Item.
aaa
05/08/10 9:49
netarrow
Tu usi queryObj, un oggetto di tipo ManagmentObject, come se fosse un array (o una funziona), il che non è ammissibile, in nessun linguaggio.


In C# puoi farlo facendo esporre alla classe un indexer; forse il problema nasce dal fatto che lui ha tradotto questa cosa che però da quello che ci dici in vb.net non c'è.
aaa
05/08/10 11:06
Il Totem
Postato originariamente da netarrow:

Tu usi queryObj, un oggetto di tipo ManagmentObject, come se fosse un array (o una funziona), il che non è ammissibile, in nessun linguaggio.


In C# puoi farlo facendo esporre alla classe un indexer; forse il problema nasce dal fatto che lui ha tradotto questa cosa che però da quello che ci dici in vb.net non c'è.


Indexer e proprietà di default sono la stessa cosa. Ad ogni modo, se l'indexer non è definito nella classe ManagmentObject, qualsiasi linguaggio .NET tu usi, non potrai mai scrivere una cosa di quel genere.

P.S.: abbiamo detto la stessa cosa, comunque...
Ultima modifica effettuata da Il Totem 05/08/10 11:07
aaa
05/08/10 11:44
netarrow
Ad ogni modo, se l'indexer non è definito nella classe ManagmentObject, qualsiasi linguaggio .NET tu usi, non potrai mai scrivere una cosa di quel genere.


Si ok, ma ManagementObject espone un indexer, ereditandolo da ManagementBaseObject.
aaa