我正在写一个语音转文本应用从用户的麦克风捕获音频,将音频流发送到服务器,并从服务器接收文本。
我正在使用WebSockets与服务器通信,我希望应用程序和服务器之间的连接结束只有当应用程序关闭(当用户按下UWP上的'X'按钮时)。
一个快速的谷歌搜索指示我使用System.ComponentModel.CancelEventHandler. 我在编写代码时使用了这个文档:https://learn.microsoft.com/en-us/dotnet/api/system.windows.window.closing?view=net-5.0
旁注:我也尝试使用应用程序。暂停事件,但注意到它在录制用户音频后关闭了我的WebSocket连接。
现在得到以下错误:
项目文件行抑制状态错误XDG0012成员"正在关闭";无法识别或无法访问。
项目文件行抑制状态错误XLS0413在"页面"类型中找不到属性"关闭"。
项目文件行抑制状态元素"Page"上的未知成员"关闭"错误
-这是错误的图片-
这是MainPage.xaml:
<Page
x:Class="SpeechToTextApp.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:SpeechToTextApp"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" Height="168" Width="410"
Closing="OnClosing">
<Page.Resources>
<SolidColorBrush x:Key="TranslucentBlackBrush" Color="Black" Opacity="1"/>
</Page.Resources>
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Button Content="Start Recording" Click="btnRec_Click" Visibility="Visible" Background="Green" x:Name="btnRec" Height="47" Width="155" Margin="31,106,0,0" VerticalAlignment="Top"/>
<Button Content="Stop Recording" Click="btnStop_Click" Visibility="Visible" Background="Red" x:Name="btnStop" Margin="245,106,0,0" VerticalAlignment="Top" Height="47" Width="139"/>
</Grid>
</Page>
这是mainpage . example .cs的重要部分
using System;
using System.Threading.Tasks;
using Windows.Media.Capture;
using Windows.Media.MediaProperties;
using Windows.Storage;
using Windows.System.Display;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using System.IO;
using Windows.Storage.Streams;
namespace SpeechToTextApp
{
public sealed partial class MainPage : Page
{
public delegate System.ComponentModel.CancelEventHandler Closing();
private static Client.Client client;
...
public MainPage()
{
this.InitializeComponent();
client = new Client.Client();
Task task = client.ConnectToServer();
...
}
private void OnClosing(object sender, System.ComponentModel.CancelEventArgs e)
{
Task task = client.DisconnectFromServer();
task.Wait();
}
...
void btnRec_Click(object sender, RoutedEventArgs e)
{
...
}
async void btnStop_Click(object sender, RoutedEventArgs e)
{
...
}
}
}
的客户'是我在Client.cs文件中为应用服务器通信编写的命名空间。命名空间中的Client类有一个ConnectToServer()方法,打开WebSocket连接和DisconnectFromServer()方法关闭WebSocket连接。
我想运行DisconnectFromServer()方法关闭应用程序时,无论如何。(就像我试图在OnClosing()函数)
要将关闭事件添加到应用程序中,必须在代码中添加以下内容:
在包中。Appxmanifest添加以下内容:
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
为IgnorableNamespaces添加rescap:
IgnorableNamespaces="rescap"
在Capabilities标签下添加:
<rescap:Capability Name="confirmAppClose" />
在MainPage中添加:
using Windows.UI.Core.Preview;
public MainPage()
{
this.InitializeComponent();
SystemNavigationManagerPreview.GetForCurrentView().CloseRequested += OnCloseRequest;
}
private void OnCloseRequest(object sender, SystemNavigationCloseRequestedPreviewEventArgs e)
{
//Do whatever you want on close
//to cancel closing use e.Handled = true;
}