Pergunta

Atualmente, estou desenvolvendo um aplicativo direcionado para o HP IPAQ 210. A parte deste aplicativo exige que o rádio WLAN seja ativado/ligado para conectar-se a um ponto de acesso pré-configurado. Atualmente, estou usando o IPAQ SDK (via P/Invoke) para ativar o rádio WLAN, mas estou tendo problemas para determinar com segurança quando o rádio estabeleceu uma conexão com o ponto de acesso preferido. Atualmente, estou monitorando a propriedade Microsoft.WindowsMobile.status.systemstate.wifistateConnected, mas prefiro assinar um evento a ser notificado quando a conexão for estabelecida.

Eu olhei um pouco na biblioteca OpenNetCF, e parece haver coisas promissoras em 2.3, mas estamos presos no 2.2 no momento.

Existe uma maneira confiável de determinar o status da conexão?

Foi útil?

Solução

É feio, e não é um evento, mas se tudo mais falhar, você pode tentar verificar o estado de hardware WiFi lendo sua chave de registro:

int key = (int)Registry.GetValue("HKEY_LOCAL_MACHINE\\System\\State\\Hardware", "WiFi", -1);

Outras dicas

Portanto, caso qualquer outra pessoa aconteça, eu achei o método chave do registro descrito acima como confiável, mas eu precisava de um método mais confiável. Mudei -me para usar a biblioteca OpenNETCF 2.2 NetworkInformation para monitorar a propriedade CurrentIPAddress do WirelessZeroconfigInterface. Ainda estou usando o iPAqutils para gerenciar o Power de rádio WLAN (encontrei o controle de rádio OpenNETCF 2.2 para falta e o dispositivo terá apenas uma única entrada de rede WiFi), mas eis como eu monitoro o endereço IP da interface :

NetworkInterface[] netIntfs = NetworkInterface.GetAllNetworkInterfaces();
foreach (NetworkInterface ni in netIntfs)
{
    if (ni is WirelessZeroConfigNetworkInterface)
    {
       wzcni = (WirelessZeroConfigNetworkInterface)ni;
    }
}

while (wzcni.CurrentIpAddress.ToString() == "0.0.0.0" && tryCount < 10)
{
    wzcni.Refresh();
    System.Threading.Thread.Sleep(3000);
    tryCount++;
}
System.Windows.Forms.Button Btn = new System.Windows.Forms.Button();
if (flag == true)
{
    for (int i = 0; i < node; i++)
    {
        Btn = new Button();
        Btn.Height = 25;
        Btn.Width =30;
        Btn.ForeColor = Color.Blue;
        Btn.BackColor = Color.Brown;                 
        Btn.AutoSize = false;
        x = rd.Next(130, 800);
        y = rd.Next(130, 500);
        Btn.Location = new Point(x, y);
        Console.WriteLine(x + "," + y);
        Btn.Text = "U" + i.ToString();
        Btn.Name = "U" + i.ToString();
        m_streamWriter.WriteLine("{0} {1} {2}",
                                 Btn.Name.ToString(),
                                 Btn.Location.X.ToString(),
                                 Btn.Location.Y.ToString());
        Btn.Click += new System.EventHandler(this.Btn_Click);
        this.Controls.Add(Btn);                    
    }
    flag = false;
    m_streamWriter.Dispose();
    startConvert();
    get_combo1();                          
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top