سؤال

أقوم حاليا بتطوير تطبيق يستهدف HP iPAQ 210. يتطلب جزء من هذا التطبيق ممكنا للراديو WLAN الخاص بتمكين / مدعوم للاتصال بنقطة وصول تم تكوينه مسبقا. أنا أستخدم حاليا iPAQ SDK (عبر P / Invoke) لتمكين راديو WLAN، ولكن أواجه مشكلة في تحديد موثوقة عندما أقام الراديو اتصالا مع نقطة الوصول المفضلة. أنا حاليا مراقبة microsoft.windowsmobile.status.systemstate.wifistatateConnection الخاصية، لكنني أفضل الاشتراك في حدث ما يجب إخطاره عند إنشاء الاتصال.

لقد بحثت قليلا في مكتبة OpenNENTCF، ويبدو أن هناك أشياء واعدة في 2.3، لكننا عالقون في 2.2 في الوقت الحالي.

هل هناك طريقة موثوقة لتحديد حالة الاتصال؟

هل كانت مفيدة؟

المحلول

إنه قبيح، وليس أي حدث، ولكن إذا فشل كل شيء آخر، فيمكنك محاولة التحقق من حالة أجهزة WiFi من خلال قراءة مفتاح التسجيل الخاص به:

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

نصائح أخرى

لذلك، في حالة يحدث أي شخص آخر عند هذا، وجدت طريقة مفتاح التسجيل الموصوفة أعلاه في الغالب موثوقة، لكنني كنت بحاجة إلى طريقة أكثر موثوقية. لقد قمت بنقلها لاستخدام مكتبة NetNENTCF 2.2 Networkinformation لمراقبة الخاصية CurrentIpAddress في WonderSzerceroconfiginterface. ما زلت أستخدم IPAQUUTILS لإدارة الطاقة الراديوية WLAN (لقد وجدت التحكم الراديوي 2.2 OpenNENTCF 2.2 غير موجود ولن يكون للجهاز إدخال شبكة WiFi واحد فقط)، ولكن هنا كيف يمكنني مراقبة عنوان IP للواجهة في

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();                          
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top