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内置函数,不可等待!可能是他们为什么不接受这个答案,哈哈。如果你有解决办法,我总是乐于学习,我会支持你的答案。谢谢你澄清这一点。