Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 网络可用性更改套接字错误_C#_Windows_Sockets_Networking_Tablet - Fatal编程技术网

C# 网络可用性更改套接字错误

C# 网络可用性更改套接字错误,c#,windows,sockets,networking,tablet,C#,Windows,Sockets,Networking,Tablet,我对创建以平板电脑为目标的应用程序还不熟悉。我有一个项目,在这个项目中,平板电脑可能在任何给定点都没有网络连接。我想监控网络可用性状态,并相应地启用/禁用UI上的功能。我读了一些书,发现了 使用System.Net.NetworkInformation。从我读到的内容来看,它似乎是我想要使用的,所以我根据我读到的文章/帖子添加了它 我使用Visual Studio 2013在.NET 4.0上运行64位Win7 Enterprise SP1。我正在运行的机器是Intel i3-2120。网络适配

我对创建以平板电脑为目标的应用程序还不熟悉。我有一个项目,在这个项目中,平板电脑可能在任何给定点都没有网络连接。我想监控网络可用性状态,并相应地启用/禁用UI上的功能。我读了一些书,发现了 使用System.Net.NetworkInformation。从我读到的内容来看,它似乎是我想要使用的,所以我根据我读到的文章/帖子添加了它

我使用Visual Studio 2013在.NET 4.0上运行64位Win7 Enterprise SP1。我正在运行的机器是Intel i3-2120。网络适配器是Intel 82579LM

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Data.SQLite;
using System.Net.NetworkInformation;
using System.Collections.ObjectModel;
using System.Windows.Media.Effects;
using System.ComponentModel;

namespace GWL{

public partial class MainWindow : Window, INotifyPropertyChanged
{
    public MainWindow()
    {
        InitializeComponent();

        this.Loaded += delegate { MainWindowLoaded(); };
    }

    private void MainWindowLoaded()
    {
        NetworkIsAvailable = NetworkInterface.GetIsNetworkAvailable();
        try
        {                
            NetworkChange.NetworkAvailabilityChanged += delegate { NetworkIsAvailable = NetworkInterface.GetIsNetworkAvailable(); };
        }
        catch (Exception e)
        {
            MessageBox.Show(e.Message);
        }
    }
}
当处理转到NetworkChange.NetworkAvailabilityChanged侦听器时,我得到以下套接字错误:

System.Net.Sockets.SocketException Error Code 10022: "An invalid argument was supplied" at System.Net.SafeCloseSocketAndEvent.CreateWSASocketWithEvent(AddressFamily addressFamily, SocketType socketType, ProtocolType protocolType, Boolean autoReset, Boolean signaled) in System. 
完整错误消息:

System.Net.Sockets.SocketException occurred
  _HResult=-2147467259
  _message=An invalid argument was supplied
  HResult=-2147467259
  IsTransient=false
  Message=An invalid argument was supplied
  Source=System
  ErrorCode=10022
  NativeErrorCode=10022
  StackTrace:
       at System.Net.SafeCloseSocketAndEvent.CreateWSASocketWithEvent(AddressFamily addressFamily, SocketType socketType, ProtocolType protocolType, Boolean autoReset, Boolean signaled)
  InnerException: 
在将委托分配给NetworkAvailabilityChanged或其他配置时,我是否遗漏了什么?感谢您的帮助。提前谢谢


更新:此问题似乎与project位于网络驱动器上的事实有关。我将其移动到本地存储,并且没有发生错误。当移回网络驱动器时,它会再次显示

您是说在语句
NetworkChange.NetworkAvailabilityChanged+=delegate{NetworkIsAvailable=NetworkInterface.GetIsNetworkAvailable();}中出现了该异常?我不认为订阅事件会引发异常(在非常不寻常的情况下,
OutOfMemoryException
可能除外)。您在什么环境下运行?Windows 8.1?Windows RT?什么版本的.NET?听起来你不是在处理.NET中的bug,就是在处理环境中的“按设计”限制。但如果没有更多细节,很难说。我正在Visual Studio 2015中使用.NET 4.0开发Win7。订阅事件时出错。我当前的实现是使用委托。我也尝试使用NetworkedAvailabilityChangedEventHandler,但得到了相同的结果。这对我来说不是一条关键路径,但它会让我的界面看起来未完成,我不能这样做。如果我能提供更多的信息,请告诉我。我可以毫无问题地重现错误。事件处理程序上方对GetIsNetworkAvailable()的调用工作正常。即使没有该调用,事件处理程序仍然会产生错误。我原以为在GetIsNetworkAvailable()之后可能会有某些内容被保留为打开状态,但事实似乎并非如此。完整堆栈跟踪是什么?并不是说GUI框架应该有所不同,而是您在这里使用的是哪一个?看起来像Winforms…你能确认吗?A会有帮助的,也许不会。但这确实是个好消息,因为这意味着你有一个失败的模型和一个有效的模型。比较两者最终会发现问题所在。只要开始从失败的产品中取出东西,直到它成功为止。:)顺便问一下,这真的是整个堆栈跟踪吗?只有一个堆栈帧的堆栈跟踪是极不寻常的。