Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.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# UWP AcceptSync(SocketAsyncEventArgs e)始终返回true,并且从不调用SocketAsyncEventArgs的方法。已完成_C#_Uwp - Fatal编程技术网

C# UWP AcceptSync(SocketAsyncEventArgs e)始终返回true,并且从不调用SocketAsyncEventArgs的方法。已完成

C# UWP AcceptSync(SocketAsyncEventArgs e)始终返回true,并且从不调用SocketAsyncEventArgs的方法。已完成,c#,uwp,C#,Uwp,我正在开发一个窗口应用程序。我想使用acceptsync方法。 目前,System.Net.Sockets.acceptsync(SocketAsyncEventArgs e)总是返回true和 永远不会调用Accept\u Completed的方法 private void ProcessAccept(SocketAsyncEventArgs e) { e.Completed += new EventHandler<SocketAsyncEventArgs>(Accept_

我正在开发一个窗口应用程序。我想使用
acceptsync
方法。 目前,
System.Net.Sockets.acceptsync(SocketAsyncEventArgs e)
总是返回true和 永远不会调用
Accept\u Completed
的方法

private void ProcessAccept(SocketAsyncEventArgs e)
{
    e.Completed += new EventHandler<SocketAsyncEventArgs>(Accept_Completed);
    e.AcceptSocket = null;

    bool waitFlag = listeningSocket.AcceptAsync(e);

    if (!waitFlag)
    {   //operation completed synchronously
        Accept_Completed(null, e);
    }
}
private void ProcessAccept(SocketAsyncEventArgs e)
{
e、 已完成+=新事件处理程序(接受\u已完成);
e、 AcceptSocket=null;
bool waitFlag=listingsocket.acceptsync(e);
如果(!waitFlag)
{//操作已同步完成
接受_已完成(空,e);
}
}

不能只调用异步函数并让它异步运行。您需要在函数签名中添加
async
关键字,并在进行异步调用的行中添加
wait
关键字

函数签名中的
async
关键字将使此函数成为异步启用的函数

await
关键字告诉应用程序它将在哪里停止执行、返回并等待异步函数完成。当它完成时,它将返回到
等待
行并继续执行

这是一个很好的例子

这是一个

例如,假设我有一个从web异步获取用户数据的函数,但我不想在调用它时锁定UI

private string GetWebData(){
     return MyWebRequests.GetWebDataAsync();
}
目前,我的
GetWebData()
函数将同步运行,因为我没有实现C#async模式

为了让它异步运行,我们需要添加两个关键字<代码>异步,和
等待

private async string GetWebData(){
     return await MyWebRequests.GetWebDataAsync();
}
这将告诉我们的应用程序一直运行到wait关键字,然后停止正在执行的操作,标记位置并退出函数。当等待的操作完成执行时,应用程序将返回其标记的位置并继续处理

我们还没有完成,我们还需要补充一件事。因为我们在这个异步操作中返回了一些东西,所以我们需要返回一个任务。在我们的示例中,我们需要一个任务。如果不返回任何内容,可以将其设置为void

private async Task<string> GetWebData(){
     return await MyWebRequests.GetWebDataAsync();
}
private异步任务GetWebData(){
return wait MyWebRequests.GetWebDataAsync();
}
就这样

现在让我们看看您的代码

private async void ProcessAccept(SocketAsyncEventArgs e)
{
    e.Completed += new EventHandler<SocketAsyncEventArgs>(Accept_Completed);
    e.AcceptSocket = null;

    bool waitFlag = await listeningSocket.AcceptAsync(e);

    if (!waitFlag)
    {   //operation completed synchronously
        Accept_Completed(null, e);
    }
}
private async void ProcessAccept(SocketAsyncEventArgs e)
{
e、 已完成+=新事件处理程序(接受\u已完成);
e、 AcceptSocket=null;
bool waitFlag=wait listeningSocket.acceptsync(e);
如果(!waitFlag)
{//操作已同步完成
接受_已完成(空,e);
}
}

不能只调用异步函数并让它异步运行。您需要在函数签名中添加
async
关键字,并在进行异步调用的行中添加
wait
关键字

函数签名中的
async
关键字将使此函数成为异步启用的函数

await
关键字告诉应用程序它将在哪里停止执行、返回并等待异步函数完成。当它完成时,它将返回到
等待
行并继续执行

这是一个很好的例子

这是一个

例如,假设我有一个从web异步获取用户数据的函数,但我不想在调用它时锁定UI

private string GetWebData(){
     return MyWebRequests.GetWebDataAsync();
}
目前,我的
GetWebData()
函数将同步运行,因为我没有实现C#async模式

为了让它异步运行,我们需要添加两个关键字<代码>异步,和
等待

private async string GetWebData(){
     return await MyWebRequests.GetWebDataAsync();
}
这将告诉我们的应用程序一直运行到wait关键字,然后停止正在执行的操作,标记位置并退出函数。当等待的操作完成执行时,应用程序将返回其标记的位置并继续处理

我们还没有完成,我们还需要补充一件事。因为我们在这个异步操作中返回了一些东西,所以我们需要返回一个任务。在我们的示例中,我们需要一个任务。如果不返回任何内容,可以将其设置为void

private async Task<string> GetWebData(){
     return await MyWebRequests.GetWebDataAsync();
}
private异步任务GetWebData(){
return wait MyWebRequests.GetWebDataAsync();
}
就这样

现在让我们看看您的代码

private async void ProcessAccept(SocketAsyncEventArgs e)
{
    e.Completed += new EventHandler<SocketAsyncEventArgs>(Accept_Completed);
    e.AcceptSocket = null;

    bool waitFlag = await listeningSocket.AcceptAsync(e);

    if (!waitFlag)
    {   //operation completed synchronously
        Accept_Completed(null, e);
    }
}
private async void ProcessAccept(SocketAsyncEventArgs e)
{
e、 已完成+=新事件处理程序(接受\u已完成);
e、 AcceptSocket=null;
bool waitFlag=wait listeningSocket.acceptsync(e);
如果(!waitFlag)
{//操作已同步完成
接受_已完成(空,e);
}
}

这不是custum Async函数,而是System.Net.Sockets.Socket.acceptsync内置函数,不可等待!可能是他们为什么不接受这个答案,哈哈。如果你有解决办法,我总是乐于学习,我会支持你的答案。感谢您澄清这一点。这不是custum异步函数,而是System.Net.Sockets.Socket.acceptationsync内置函数,不可等待!可能是他们为什么不接受这个答案,哈哈。如果你有解决办法,我总是乐于学习,我会支持你的答案。谢谢你澄清这一点。