5 votes

Meilleure façon d'obtenir le coût du réseau sur .Net Core 2.0

Existe-t-il un moyen de connaître le coût du réseau sur .Net Core 2.0 ?
Voici comment j'obtiens le coût du réseau dans mon code c++ :

hr = pNetworkCostManager->GetCost(&dwCost, NULL);
if (hr == S_OK) {
    switch (dwCost) {
    case NLM_CONNECTION_COST_UNRESTRICTED:  
    case NLM_CONNECTION_COST_FIXED:         
    case NLM_CONNECTION_COST_VARIABLE:      
    case NLM_CONNECTION_COST_OVERDATALIMIT: 
    case NLM_CONNECTION_COST_CONGESTED:    
    case NLM_CONNECTION_COST_ROAMING:     
    case NLM_CONNECTION_COST_APPROACHINGDATALIMIT:
    case NLM_CONNECTION_COST_UNKNOWN:
    }
}

Une chose que .Net Core (2.0) possède est le NetworkInterfaceType ( https://docs.microsoft.com/en-us/dotnet/api/system.net.networkinformation.networkinterfacetype?view=netcore-1.0 )

En me basant sur le type d'interface réseau (NetworkInterfaceType), je peux voir s'il s'agit d'une connexion wifi, réseau ou mobile, mais cela ne se traduira pas par un coût.
Existe-t-il un moyen de connaître le coût du réseau sur .Net Core 2.0 ?

3voto

martin_joerg Points 1034

Appeler GetCost vous devrez utiliser l'interface COM. Si vous avez besoin de faire exactement cet appel, c'est-à-dire de passer NULL au lieu d'une adresse IP dans GetCost Dans ce cas, vous devrez définir vous-même l'interface COM pour répondre à vos besoins, par exemple de la manière suivante :

using System;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

[ComImport, Guid("DCB00C01-570F-4A9B-8D69-199FDBA5723B"), ClassInterface(ClassInterfaceType.None)]
public class NetworkListManager : INetworkCostManager
{
    [MethodImpl(MethodImplOptions.InternalCall)]
    public virtual extern void GetCost(out uint pCost, [In] IntPtr pDestIPAddr);
}

[ComImport, Guid("DCB00008-570F-4A9B-8D69-199FDBA5723B"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface INetworkCostManager
{
    void GetCost(out uint pCost, [In] IntPtr pDestIPAddr);
}

Vous pouvez alors obtenir les informations sur les coûts de la manière suivante :

new NetworkListManager().GetCost(out uint cost, IntPtr.Zero);

Si vous n'avez pas l'obligation de passer l'examen d'entrée à l'université, vous pouvez vous inscrire à l'université. NULL en GetCost vous pouvez simplement ajouter une référence à la bibliothèque de types COM "Network List Manager 1.0 Type Library", régler "Embed Interop Types" sur false y utiliser ces définitions .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X