2013-09-02 5 views
7

First up, hier ist der Hintergrund:C# lesen Windows Mobile Breitband-Verbindungseigenschaften

Wir haben eine Windows Forms-Anwendung (geschrieben in C#, .NET Framework 3.5), die derzeit auf volle Windows 7 Tabletten ausgeführt wird, die ein 3G-Modul haben eingebaut, das für Datenkonnektivität verwendet wird. Die Datenverbindung ist als eine normale mobile Breitbandverbindung in Windows konfiguriert (Windows verwaltet also die Verbindung selbst), und die Verbindung wird in Systemsteuerung> Netzwerk und Internet> Netzwerkverbindungen angezeigt und es funktioniert gut - die Anwendung kann über die Verbindung kommunizieren Internet mit unserem Webservice. Wir werden irgendwann auf ein anderes Gerät (wahrscheinlich ein volles Windows 8-basiertes Tablet) umziehen.

Nun, was ich tun muss, ist den Verbindungsstatus dieser mobilen Breitbandverbindung zu lesen; d. h. die Signalstärke und den Namen des Trägers (z. B. Vodafone UK). Ich habe einen Weg gefunden, dies mit dem Mobile Broadband API Teil des Windows 7 SDK zu tun (siehe here und here), aber dies scheint OS-spezifisch zu sein, da es unter Windows 8 nicht funktioniert - oder zumindest nicht mit dem Gerät habe ich hier.

Gibt es eine allgemeine Möglichkeit, die Eigenschaften der mobilen Breitbandverbindung mit dem .NET-Framework zu lesen?

Oder kennt jemand ein Windows 8 SDK, das eine Mobile Broadband API wie die Windows 7 enthält, die ich gerade benutze?

Vielen Dank im Voraus.

Update - Ich habe jetzt funktioniert auf einer Reihe von verschiedenen Win 7/Win 8 Geräte. Sogar das Lenovo-Gerät funktioniert einwandfrei. Ich poste Beispielcode für die Hauptbits (Verbindungsstatus lesen, Verbindung konfigurieren, SIM-Status prüfen) als Antworten; Der Code ist ein bisschen zu lang, um die Frage zu beantworten.

+1

Ich habe die meisten der Code habe ich als Antworten unten für die Prüfung am Ende mit. Ihr eigener Code wird wahrscheinlich nicht mit MessageBoxes übersät sein, aber hoffentlich finden andere die Beispiele nützlich. –

+0

Hallo, wie hast du das auf Windows 8 zu arbeiten? mbnInfMgrInterface = null, wenn ich das selbe unter Windows 8 versuche ... Benötige ich eine Zusatzinstallation oder reicht die Interop.MbnApi.dll? – user1841243

+2

Alle Win 8-Geräte, die ich ausprobierte, kamen mit einem IMbnInterfaceManager zurück - obwohl es ohne einen mobilen Breitbandadapter (z. B. meinen Desktop-PC) nicht funktionierte. Welches Gerät ist es, und funktioniert der Adapter, wenn er manuell in Windows konfiguriert wird? –

Antwort

2

Die mobile Breitband-API ist auch in Windows 8 Desktop verfügbar.

Wenn Sie Windows 8 Metro/RT/welcher Name auch immer verwenden, benötigen Sie these WindowsRT APIs (Windows.Connectivity.NetworkInformation etc).

+0

Ich habe es geschafft, dass die Mobile Broadband API jetzt auf einem Win8-Tablet funktioniert. Aus irgendeinem Grund funktioniert es nicht auf allen Win8-Rechnern. Ich denke, es liegt an der witzigen Art, auf der einige Rechner ihre mobile Datenverbindung aufbauen (zB das Lenovo Thinkpad Tablet 2, das ein mobiles Breitbandmodem hat, aber dafür konfiguriert ist) Emulieren Sie einen Ethernet-Adapter in Windows, so dass die Mobile Broadband API dies nicht übernimmt). –

+0

Gibt es zufällig eine permanente IP-Verbindung für diesen Ethernet-Adapter, auch wenn keine Backhaul-Mobilfunkverbindung besteht? –

+0

Ich fand am Ende, dass es nichts mit dem seltsamen Pseudo-Ethernet-Adapter zu tun hatte. Es war nur das SDK, das sich bei verschiedenen mobilen Breitbandadaptern geringfügig anders verhält. Der folgende Code funktioniert auf den 4 verschiedenen Win 7, Win 8 und 8.1 Geräten, die ich ausprobiert habe. Vielen Dank für Ihre Hilfe! –

3

Lesen Sie den Verbindungsstatus:

try 
     { 
      MbnInterfaceManager mbnInfMgr = new MbnInterfaceManager(); 
      IMbnInterfaceManager mbnInfMgrInterface = mbnInfMgr as IMbnInterfaceManager; 
      if (mbnInfMgrInterface != null) 
      { 
       IMbnInterface[] mobileInterfaces = mbnInfMgrInterface.GetInterfaces() as IMbnInterface[]; 
       if (mobileInterfaces != null && mobileInterfaces.Length > 0) 
       { 
        // Use the first interface, as there should only be one mobile data adapter 
        IMbnSignal signalDetails = mobileInterfaces[0] as IMbnSignal; 

        Int32.TryParse(signalDetails.GetSignalStrength().ToString(), out PhoneSignal); 
        PhoneSignal = Convert.ToInt32(((float)PhoneSignal/16) * 100); 

        MBN_PROVIDER provider = mobileInterfaces[0].GetHomeProvider(); 
        PhoneNetwork = provider.providerName.ToString(); 

        if (String.IsNullOrEmpty(SIMNumber)) 
        { 
         try 
         { 
          IMbnSubscriberInformation subInfo = mobileInterfaces[0].GetSubscriberInformation(); 

          if (subInfo != null) 
          { 
           SIMNumber = subInfo.SimIccID; 
          } 
          else 
          { 
           SIMNumber = "Unable to read SIM info"; 
          } 
         } 
         catch (Exception) 
         { 
          SIMNumber = "Unable to read SIM info"; 
         } 
        } 

        // Check whether the connection is active 
        IMbnConnection connection = mobileInterfaces[0].GetConnection(); 

        if (connection != null) 
        { 
         MBN_ACTIVATION_STATE state; 
         string profileName = String.Empty; 
         connection.GetConnectionState(out state, out profileName); 

         Connected = (state == MBN_ACTIVATION_STATE.MBN_ACTIVATION_STATE_ACTIVATED); 
        } 
        else 
        { 
         MessageBox.Show("Connection not found."); 
        } 
       } 
       else 
       { 
        MessageBox.Show("No mobile interfaces found."); 
       } 
      } 
      else 
      { 
       MessageBox.Show("mbnInfMgrInterface is null."); 
      } 
     } 
     catch (Exception ex) 
     { 
      if (ex.Message.Contains("SIM is not inserted.")) 
      { 
       SIMNumber = "No SIM inserted."; 
      } 
      else 
      { 
       MessageBox.Show("LoginForm.DataConnection GetWindowsMobileDataStatus " + ex.Message); 
      } 
      PhoneSignal = 0; 
      PhoneNetwork = "Unknown"; 
     } 
2

die SIM-Checking eingesetzt und arbeitet/aktiviert:

try 
     { 
      MbnInterfaceManager mbnInfMgr = new MbnInterfaceManager(); 
      IMbnInterfaceManager mbnInfMgrInterface = mbnInfMgr as IMbnInterfaceManager; 
      if (mbnInfMgrInterface != null) 
      { 
       IMbnInterface[] mobileInterfaces = mbnInfMgrInterface.GetInterfaces() as IMbnInterface[]; 
       if (mobileInterfaces != null && mobileInterfaces.Length > 0) 
       { 
        try 
        { 
         MBN_READY_STATE readyState = mobileInterfaces[0].GetReadyState(); 

         switch (readyState) 
         { 
          case MBN_READY_STATE.MBN_READY_STATE_BAD_SIM: 
           MessageBox.Show("The SIM is invalid (PIN Unblock Key retrials have exceeded the limit)."); 
           break; 
          case MBN_READY_STATE.MBN_READY_STATE_DEVICE_BLOCKED: 
           MessageBox.Show("The device is blocked by a PIN or password which is preventing the device from initializing and registering onto the network."); 
           break; 
          case MBN_READY_STATE.MBN_READY_STATE_DEVICE_LOCKED: 
           MessageBox.Show("The device is locked by a PIN or password which is preventing the device from initializing and registering onto the network."); 
           break; 
          case MBN_READY_STATE.MBN_READY_STATE_FAILURE: 
           MessageBox.Show("General device failure."); 
           break; 
          case MBN_READY_STATE.MBN_READY_STATE_INITIALIZED: 
           try 
           { 
            IMbnSubscriberInformation subInfo = mobileInterfaces[0].GetSubscriberInformation(); 

            if (subInfo != null) 
            { 
             SIMNumber = subInfo.SimIccID; 
            } 
            else 
            { 
             SIMNumber = "Unable to read SIM info"; 
            } 
           } 
           catch (Exception) 
           { 
            SIMNumber = "Unable to read SIM info"; 
           } 

           IMbnRegistration registration = mobileInterfaces[0] as IMbnRegistration; 
           if (registration != null) 
           { 
            try 
            { 
             MBN_REGISTER_STATE regState = registration.GetRegisterState(); 

             switch (regState) 
             { 
              case MBN_REGISTER_STATE.MBN_REGISTER_STATE_DENIED: 
               // SIM Inactive 
               simInactive = true; 
               MessageBox.Show("The device was denied registration. The most likely cause of this error is an Inactive SIM."); 
               break; 
              case MBN_REGISTER_STATE.MBN_REGISTER_STATE_DEREGISTERED: 
               // Do nothing - this is returned before the device has tried to register 
               break; 
              case MBN_REGISTER_STATE.MBN_REGISTER_STATE_HOME: 
               // Do nothing 
               break; 
              case MBN_REGISTER_STATE.MBN_REGISTER_STATE_NONE: 
               MessageBox.Show("The device registration state is unknown. This state may be set upon failure of registration mode change requests."); 
               break; 
              case MBN_REGISTER_STATE.MBN_REGISTER_STATE_PARTNER: 
               // Do nothing 
               break; 
              case MBN_REGISTER_STATE.MBN_REGISTER_STATE_ROAMING: 
               // Do nothing 
               break; 
              case MBN_REGISTER_STATE.MBN_REGISTER_STATE_SEARCHING: 
               // Do nothing 
               break; 
              default: 
               MessageBox.Show("GetRegisterState returned an unexpected state: " + regState.ToString()); 
               break; 
             } 
            } 
            catch (Exception ex) 
            { 
             MessageBox.Show("GetRegisterState Error: " + ex.Message); 
            } 
           } 
           break; 
          case MBN_READY_STATE.MBN_READY_STATE_NOT_ACTIVATED: 
           MessageBox.Show("The subscription is not activated."); 
           break; 
          case MBN_READY_STATE.MBN_READY_STATE_OFF: 
           MessageBox.Show("The mobile broadband device stack is off."); 
           break; 
          case MBN_READY_STATE.MBN_READY_STATE_SIM_NOT_INSERTED: 
           MessageBox.Show("The SIM is not inserted."); 
           break; 
          default: 
           MessageBox.Show("GetReadyState returned an unexpected state: " + readyState.ToString()); 
           break; 
         } 
        } 
        catch (Exception ex) 
        { 
         MessageBox.Show("GetReadyState Error: " + ex.Message); 
        } 
       } 
       else 
       { 
        MessageBox.Show("No mobileInterfaces found."); 
       } 
      } 
      else 
      { 
       MessageBox.Show("mbnInfMgrInterface is null."); 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Error: " + ex.Message); 
     } 
4

Konfigurieren einer Verbindung programmatisch (Sie werden die APN-Informationen benötigen):

try 
     { 
      MbnInterfaceManager mbnInfMgr = new MbnInterfaceManager(); 
      IMbnInterfaceManager mbnInfMgrInterface = mbnInfMgr as IMbnInterfaceManager; 
      if (mbnInfMgrInterface != null) 
      { 
       IMbnInterface[] mobileInterfaces = mbnInfMgrInterface.GetInterfaces() as IMbnInterface[]; 
       if (mobileInterfaces != null && mobileInterfaces.Length > 0) 
       { 
        // Just use the first interface 
        IMbnSubscriberInformation subInfo = mobileInterfaces[0].GetSubscriberInformation(); 

        if (subInfo != null) 
        { 
         SIMNumber = subInfo.SimIccID; 
         // Get the connection profile 
         MbnConnectionProfileManager mbnConnProfileMgr = new MbnConnectionProfileManager(); 
         IMbnConnectionProfileManager mbnConnProfileMgrInterface = mbnConnProfileMgr as IMbnConnectionProfileManager; 
         if (mbnConnProfileMgrInterface != null) 
         { 
          bool connProfileFound = false; 
          string profileName = String.Empty; 

          try 
          { 
           IMbnConnectionProfile[] mbnConnProfileInterfaces = mbnConnProfileMgrInterface.GetConnectionProfiles(mobileInterfaces[0]) as IMbnConnectionProfile[]; 

           foreach (IMbnConnectionProfile profile in mbnConnProfileInterfaces) 
           { 
            string xmlData = profile.GetProfileXmlData(); 

            if (xmlData.Contains("<SimIccID>" + SIMNumber + "</SimIccID>")) 
            { 
             connProfileFound = true; 
             bool updateRequired = false; 

             // Check if the profile is set to auto connect 
             XmlDocument xdoc = new XmlDocument(); 
             xdoc.LoadXml(xmlData); 

             profileName = xdoc["MBNProfile"]["Name"].InnerText; 

             if (xdoc["MBNProfile"]["ConnectionMode"].InnerText != "auto") 
             { 
              xdoc["MBNProfile"]["ConnectionMode"].InnerText = "auto"; 
              updateRequired = true; 
             } 

             // Check the APN settings 
             if (xdoc["MBNProfile"]["Context"] == null) 
             { 
              XmlElement context = (XmlElement)xdoc["MBNProfile"].AppendChild(xdoc.CreateElement("Context", xdoc["MBNProfile"].NamespaceURI)); 
              context.AppendChild(xdoc.CreateElement("AccessString", xdoc["MBNProfile"].NamespaceURI)); 
              context.AppendChild(xdoc.CreateElement("Compression", xdoc["MBNProfile"].NamespaceURI)); 
              context.AppendChild(xdoc.CreateElement("AuthProtocol", xdoc["MBNProfile"].NamespaceURI)); 
              updateRequired = true; 
             } 

             if (xdoc["MBNProfile"]["Context"]["AccessString"].InnerText != APNAccessString) 
             { 
              xdoc["MBNProfile"]["Context"]["AccessString"].InnerText = APNAccessString; 
              updateRequired = true; 
             } 
             if (xdoc["MBNProfile"]["Context"]["Compression"].InnerText != APNCompression) 
             { 
              xdoc["MBNProfile"]["Context"]["Compression"].InnerText = APNCompression; 
              updateRequired = true; 
             } 
             if (xdoc["MBNProfile"]["Context"]["AuthProtocol"].InnerText != APNAuthProtocol) 
             { 
              xdoc["MBNProfile"]["Context"]["AuthProtocol"].InnerText = APNAuthProtocol; 
              updateRequired = true; 
             } 

             if (xdoc["MBNProfile"]["Context"]["UserLogonCred"] == null && !String.IsNullOrEmpty(APNUsername)) 
             { 
              XmlElement userLogonCred = (XmlElement)xdoc["MBNProfile"]["Context"].InsertAfter(xdoc.CreateElement("UserLogonCred", xdoc["MBNProfile"].NamespaceURI), xdoc["MBNProfile"]["Context"]["AccessString"]); 
              userLogonCred.AppendChild(xdoc.CreateElement("UserName", xdoc["MBNProfile"].NamespaceURI)); 
              userLogonCred.AppendChild(xdoc.CreateElement("Password", xdoc["MBNProfile"].NamespaceURI)); 
              updateRequired = true; 
             } 

             if (xdoc["MBNProfile"]["Context"]["UserLogonCred"] != null && xdoc["MBNProfile"]["Context"]["UserLogonCred"]["UserName"].InnerText != APNUsername) 
             { 
              xdoc["MBNProfile"]["Context"]["UserLogonCred"]["UserName"].InnerText = APNUsername; 
              updateRequired = true; 
             } 

             if (xdoc["MBNProfile"]["Context"]["UserLogonCred"] != null && xdoc["MBNProfile"]["Context"]["UserLogonCred"]["Password"] == null && !String.IsNullOrEmpty(APNUsername)) 
             { 
              xdoc["MBNProfile"]["Context"]["UserLogonCred"].AppendChild(xdoc.CreateElement("Password", xdoc["MBNProfile"].NamespaceURI)); 
             } 

             if (xdoc["MBNProfile"]["Context"]["UserLogonCred"] != null && xdoc["MBNProfile"]["Context"]["UserLogonCred"]["Password"].InnerText != APNPassword) 
             { 
              xdoc["MBNProfile"]["Context"]["UserLogonCred"]["Password"].InnerText = APNPassword; 
              updateRequired = true; 
             } 

             if (updateRequired) 
             { 
              // Update the connection profile 
              profile.UpdateProfile(xdoc.OuterXml); 
             } 
            } 
           } 
          } 
          catch (Exception ex) 
          { 
           if (!ex.Message.Contains("Element not found")) 
           { 
            throw ex; 
           } 
          } 

          if (!connProfileFound) 
          { 
           // Create the connection profile 
           XmlDocument xdoc = new XmlDocument(); 
           xdoc.AppendChild(xdoc.CreateXmlDeclaration("1.0", "utf-8", "yes")); 
           XmlElement mbnProfile = (XmlElement)xdoc.AppendChild(xdoc.CreateElement("MBNProfile", "http://www.microsoft.com/networking/WWAN/profile/v1")); 
           mbnProfile.AppendChild(xdoc.CreateElement("Name", xdoc["MBNProfile"].NamespaceURI)).InnerText = SIMNumber; 
           mbnProfile.AppendChild(xdoc.CreateElement("IsDefault", xdoc["MBNProfile"].NamespaceURI)).InnerText = "true"; 
           mbnProfile.AppendChild(xdoc.CreateElement("ProfileCreationType", xdoc["MBNProfile"].NamespaceURI)).InnerText = "DeviceProvisioned"; 
           mbnProfile.AppendChild(xdoc.CreateElement("SubscriberID", xdoc["MBNProfile"].NamespaceURI)).InnerText = subInfo.SubscriberID; 
           mbnProfile.AppendChild(xdoc.CreateElement("SimIccID", xdoc["MBNProfile"].NamespaceURI)).InnerText = SIMNumber; 
           mbnProfile.AppendChild(xdoc.CreateElement("HomeProviderName", xdoc["MBNProfile"].NamespaceURI)).InnerText = SIMNumber; 
           mbnProfile.AppendChild(xdoc.CreateElement("AutoConnectOnInternet", xdoc["MBNProfile"].NamespaceURI)).InnerText = "true"; 
           mbnProfile.AppendChild(xdoc.CreateElement("ConnectionMode", xdoc["MBNProfile"].NamespaceURI)).InnerText = "auto"; 

           XmlElement context = (XmlElement)xdoc["MBNProfile"].AppendChild(xdoc.CreateElement("Context", xdoc["MBNProfile"].NamespaceURI)); 
           context.AppendChild(xdoc.CreateElement("AccessString", xdoc["MBNProfile"].NamespaceURI)); 
           XmlElement userLogonCred = (XmlElement)context.AppendChild(xdoc.CreateElement("UserLogonCred", xdoc["MBNProfile"].NamespaceURI)); 
           userLogonCred.AppendChild(xdoc.CreateElement("UserName", xdoc["MBNProfile"].NamespaceURI)); 
           userLogonCred.AppendChild(xdoc.CreateElement("Password", xdoc["MBNProfile"].NamespaceURI)); 
           context.AppendChild(xdoc.CreateElement("Compression", xdoc["MBNProfile"].NamespaceURI)); 
           context.AppendChild(xdoc.CreateElement("AuthProtocol", xdoc["MBNProfile"].NamespaceURI)); 

           xdoc["MBNProfile"]["Context"]["AccessString"].InnerText = APNAccessString; 
           xdoc["MBNProfile"]["Context"]["UserLogonCred"]["UserName"].InnerText = APNUsername; 
           xdoc["MBNProfile"]["Context"]["UserLogonCred"]["Password"].InnerText = APNPassword; 
           xdoc["MBNProfile"]["Context"]["Compression"].InnerText = APNCompression; 
           xdoc["MBNProfile"]["Context"]["AuthProtocol"].InnerText = APNAuthProtocol; 

           profileName = xdoc["MBNProfile"]["Name"].InnerText; 

           mbnConnProfileMgrInterface.CreateConnectionProfile(xdoc.OuterXml); 
          } 

          // Register the connection events 
          MbnConnectionManager connMgr = new MbnConnectionManager(); 
          IConnectionPointContainer connPointContainer = connMgr as IConnectionPointContainer; 

          Guid IID_IMbnConnectionEvents = typeof(IMbnConnectionEvents).GUID; 
          IConnectionPoint connPoint; 
          connPointContainer.FindConnectionPoint(ref IID_IMbnConnectionEvents, out connPoint); 

          ConnectionEventsSink connEventsSink = new ConnectionEventsSink(); 
          connPoint.Advise(connEventsSink, out cookie); if (showProgress) { MessageBox.Show("After registering events"); } 

          // Connect 
          IMbnConnection connection = mobileInterfaces[0].GetConnection(); 

          if (connection != null) 
          { 
           MBN_ACTIVATION_STATE state; 
           string connectionProfileName = String.Empty; 
           connection.GetConnectionState(out state, out connectionProfileName); 

           if (state != MBN_ACTIVATION_STATE.MBN_ACTIVATION_STATE_ACTIVATED && state != MBN_ACTIVATION_STATE.MBN_ACTIVATION_STATE_ACTIVATING) 
           { 
            if (String.IsNullOrEmpty(connectionProfileName)) 
            { 
             connectionProfileName = profileName; 
            } 
            uint requestID; 
            connection.Connect(MBN_CONNECTION_MODE.MBN_CONNECTION_MODE_PROFILE, connectionProfileName, out requestID); 

           } 
           else 
           { 
            // Do nothing, already connected 
           } 
          } 
          else 
          { 
           MessageBox.Show("Connection not found."); 
          } 
         } 
         else 
         { 
          MessageBox.Show("mbnConnProfileMgrInterface is null."); 
         } 
        } 
        else 
        { 
         MessageBox.Show("No subscriber info found."); 
        } 
       } 
       else 
       { 
        MessageBox.Show("No mobile interfaces found."); 
       } 
      } 
      else 
      { 
       MessageBox.Show("mbnInfMgrInterface is null."); 
      } 
     } 
     catch (Exception ex) 
     { 
      if (ex.Message.Contains("SIM is not inserted.")) 
      { 
       SIMNumber = "No SIM inserted."; 
      } 
      MessageBox.Show("LoginForm.DataConnection ConfigureWindowsDataConnection Error " + ex.Message); 
     } 
+0

Wissen Sie, ob ich Ihre Lösung unter Windows 10 (d. H. LTSB 1607) verwenden kann? – creg

1

Respond auf die Verbindungsereignisse (Ereignisse werden in dem obigen Beispiel registriert):

public class ConnectionEventsSink : IMbnConnectionEvents 
    { 
     public ConnectionEventsSink() { } 

     public void OnConnectComplete(IMbnConnection connection, uint requestID, int status) 
     { 
      // Un-register the connect event - you might not want to do this, depends on your own requirements. Do do this you need the cookie uint from when the events were registered. 
      MbnConnectionManager connMgr = new MbnConnectionManager(); 
      IConnectionPointContainer connPointContainer = connMgr as IConnectionPointContainer; 

      Guid IID_IMbnConnectionEvents = typeof(IMbnConnectionEvents).GUID; 
      IConnectionPoint connPoint; 
      connPointContainer.FindConnectionPoint(ref IID_IMbnConnectionEvents, out connPoint); 

      connPoint.Unadvise(cookie); 

      switch (status) 
      { 
       case 0: 
        MobileBroadbandTest.Connected = true; 
        MessageBox.Show("Connected"); 
        break; 
       case -2141945334: 
        MessageBox.Show("There is no SIM in the device."); 
        break; 
       case -2141945328: 
        MessageBox.Show("A PIN is required for the operation to complete."); 
        break; 
       case -2141945335: 
        MessageBox.Show("The network service subscription has expired."); 
        break; 
       case -2141945337: 
        MessageBox.Show("The provider is not visible. This applies only to manual registration mode."); 
        break; 
       case -2141945340: 
        MessageBox.Show("The connection access string is not correct."); 
        break; 
       case -2141945333: 
        MessageBox.Show("An active voice call is in progress."); 
        break; 
       case -2141945339: 
        MessageBox.Show("There is already an Mobile Broadband context active. The Mobile Broadband service does not currently support multiple active contexts."); 
        break; 
       case -2141945336: 
        MessageBox.Show("The device radio is off."); 
        break; 
       case -2141945338: 
        MessageBox.Show("No active attached packet service is available."); 
        break; 
       case -2141945326: 
        MessageBox.Show("Generic Failure."); 
        break; 
       case -2141945320: 
        MessageBox.Show("Profile is invalid."); 
        break; 
       case -2141945319: 
        MessageBox.Show("Default profile exist."); 
        break; 
       case -2141945327: 
        MessageBox.Show("PIN is disabled."); 
        break; 
       case -2141945329: 
        MessageBox.Show("Pin is not supported."); 
        break; 
       case -2141945330: 
        MessageBox.Show("Providers not found."); 
        break; 
       case -2141945331: 
        MessageBox.Show("Device is not registered."); 
        break; 
       case -2141945332: 
        MessageBox.Show("Visible provider cache is invalid."); 
        break; 
       case -2141945341: 
        MessageBox.Show("Requested data class is not available."); 
        break; 
       case -2141945342: 
        MessageBox.Show("Bad SIM is inserted."); 
        break; 
       case -2141945343: 
        MessageBox.Show("Context is not activated."); 
        break; 

       default: 
        MessageBox.Show("Unexpected status: " + status.ToString()); 
        break; 
      } 
     } 

     public void OnVoiceCallStateChange(IMbnConnection connection) 
     { 
      // Do nothing 
     } 

     public void OnConnectStateChange(IMbnConnection connection) 
     { 
      // Do nothing 
     } 

     public void OnDisconnectComplete(IMbnConnection connection, uint requestID, int status) 
     { 
      // Do nothing 
     } 

}

+0

Hinweis für andere Leser: Dies ist entscheidend - Sie werden nicht darüber informiert, dass Verbindungen erfolgreich sind/nicht erfolgreich sind. Achten Sie auch darauf, dass Sie sich nur einmal (im Allgemeinen) registrieren oder viele Benachrichtigungen erhalten. Dies unterscheidet sich sehr in der Herangehensweise von uns an eine synchrone Verwendung von (sagen wir) RAS. –