C# 以c语言获取wifi信号电平#

C# 以c语言获取wifi信号电平#,c#,wifi,C#,Wifi,我试图连续读取wifi信号,以了解嵌入式系统的wifi信号水平是如何变化的。我在SO中读了几篇关于如何用C#读取wifi信号电平的文章,例如: 但是当我尝试做同样的事情时,我总是得到同样的价值。我的代码如下(简化版): static void Main(字符串[]args) { 字符串selectedSSDID=“BTWiFi”; var client=new WlanClient(); 对于(int i=0;i

我试图连续读取wifi信号,以了解嵌入式系统的wifi信号水平是如何变化的。我在SO中读了几篇关于如何用C#读取wifi信号电平的文章,例如:

但是当我尝试做同样的事情时,我总是得到同样的价值。我的代码如下(简化版):

static void Main(字符串[]args)
{
字符串selectedSSDID=“BTWiFi”;
var client=new WlanClient();
对于(int i=0;i<1000;i++)
{
foreach(客户端接口中的WlanClient.WlanInterface-wlanface)
{
Wlan.WlanBssEntry[]wlanBssEntries=wlanIface.GetNetworkBssList();
foreach(Wlan.WlanBssEntry中的Wlan.WlanBssEntry网络)
{
var networkSSID=Encoding.ASCII.GetString(network.dot11Ssid.SSID,0,(int)network.dot11Ssid.SSIDLength);
if(selectedSSDID==networkSSID)
{
Console.Out.WriteLine(network.rssi);
}
}
}
系统线程线程睡眠(1000);
}
}
当我运行这段代码时,我会看到信号电平总是作为一个值报告,并且不会改变

我用它来对付一个有wifi的嵌入式系统,甚至当我把设备放在电脑旁边,当我移动到离电脑很远的另一个房间时,如果应用程序运行,它总是报告相同的值,如果我重新启动应用程序,值就会改变


此代码有什么问题,它没有报告正确的值?

您可以尝试将代码
var client=new WlanClient()
移动到
for
循环中吗?从源代码来看,它的工作方式是在构造函数中创建和查找网络接口。因此,在您的情况下,只创建一次实例,因此实例的信息存储在内存中,不会刷新。因此,每当您重新启动应用程序时,它都会再次收集信息,因为构造函数再次被调用。@PratikGaikwad我无法将其移动到for循环,因为它在某些迭代后会生成错误。某些迭代后的错误是因为
InterOp
对象在使用后未被释放。但不管迭代次数多少,它是否改变了信号的值?如果是这样,那么您将不得不对原始源代码做一些小的更改。您是否在WiFi路由器而非嵌入式设备上尝试了您的原始代码?它在那里工作吗?@PratikGaikwad由于错误发生得很快,我看不到任何变化。我是否正确地相信,在引导时固定的接口代表了计算机上的wifi接口,并且没有改变?对于错误,您可以引入超过1000秒的延迟。不,我建议你们先在路由器上测试一下。因为计算机上的接口通过自己的轮询继续记录信号。您只是在探测它们以获得值。
    static void Main(string[] args)
    {
        string selectedSSDID = "BTWiFi";
        var client = new WlanClient();
        for (int i = 0; i < 1000; i++)
        {
            foreach (WlanClient.WlanInterface wlanIface in client.Interfaces)
            {
                Wlan.WlanBssEntry[] wlanBssEntries = wlanIface.GetNetworkBssList();

                foreach (Wlan.WlanBssEntry network in wlanBssEntries)
                {
                    var networkSSID = Encoding.ASCII.GetString(network.dot11Ssid.SSID, 0, (int)network.dot11Ssid.SSIDLength);

                    if (selectedSSDID == networkSSID)
                    {
                        Console.Out.WriteLine(network.rssi);
                    }
                }
            }
            System.Threading.Thread.Sleep(1000);
        }
    }