- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的 Xamarin 应用程序中有一个通过 SMTP 服务器发送电子邮件的内容页面。
点击提交按钮发送电子邮件后,应用程序只会等待。在此等待期间,我想显示事件指示器或文本加载标签,以便用户在显示进程成功的 DisplayAlert 之前知道某些东西正在工作。
出于某种原因,ActivityIndicator 和标签文本未显示。也许我做错了什么。
XAML
<StackLayout x:Name="myPop" AbsoluteLayout.LayoutBounds="0, 0, 1, 1"
AbsoluteLayout.LayoutFlags="All" BackgroundColor="#C0808080" Padding="5">
<ContentView x:Name="input_box_overlay"
AbsoluteLayout.LayoutBounds="0, 0, 1, 1"
AbsoluteLayout.LayoutFlags="All"
Padding="5">
<StackLayout Padding="20" BackgroundColor="White"
HorizontalOptions="Center" VerticalOptions="Center"
HeightRequest="230" WidthRequest="230">
<Label Text="Enter suggestion" TextColor="Black" FontSize="Medium"/>
<StackLayout Padding="0, 10, 0, 0">
<Editor x:Name="user_text" HeightRequest="100" Keyboard="Chat" BackgroundColor="#f7f8f9"/>
</StackLayout>
<StackLayout HorizontalOptions="Center" VerticalOptions="Center">
<Label Text="Submitting..." x:Name="load"/>
<ActivityIndicator x:Name="indicator"/>
</StackLayout>
<StackLayout Orientation="Horizontal" VerticalOptions="EndAndExpand" HorizontalOptions="CenterAndExpand">
<Button TextColor="White" Text="Cancel" Clicked="Cancel_Clicked" BackgroundColor="#C0808080"/>
<Button TextColor="White" Text="Submit" Clicked="Submit_Clicked" BackgroundColor="#395368" />
</StackLayout>
</StackLayout>
</ContentView>
</StackLayout>
Submit_Clicked
方法/事件的代码
private async void Submit_Clicked(object sender, EventArgs e)
{
try
{
indicator.IsRunning = true;
indicator.IsVisible = true;
indicator.IsEnabled = true;
load.IsVisible = true;
MailMessage mail = new MailMessage();
SmtpClient SmtpServer = new SmtpClient("smtp.sendgrid.net");
mail.From = new MailAddress("email@domain.com");
mail.To.Add("email@domain.com");
mail.Subject = "Subject";
mail.Body = user_msg;
SmtpServer.Port = 25;
SmtpServer.Credentials = new NetworkCredential("username", "password");
SmtpServer.EnableSsl = true;
ServicePointManager.ServerCertificateValidationCallback = delegate (object sendemail, X509Certificate certificate, X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors)
{
return true;
};
SmtpServer.SendCompleted += (s, ev) => {
indicator.IsRunning = false;
indicator.IsVisible = false;
indicator.IsEnabled = false;
load.IsVisible = false;
};
SmtpServer.Send(mail);
await DisplayAlert("Success", "Message Sent. Thank you.", "Ok");
myPop.IsVisible = false;
myPop.IsEnabled = false;
}
catch (Exception ex)
{
await DisplayAlert("Error", "Something went wrong. Please try again.", "ok");
Console.WriteLine(ex.ToString());
}
}
最佳答案
考虑保持代码异步,不要让它阻塞 UI,SmtpClient.Send
这是对提供的原始代码的重构,以允许非阻塞流
private async void Submit_Clicked(object sender, EventArgs e) {
try {
ToggleIndicator(true);
await SendEmailAsync();
ToggleIndicator(false);
await DisplayAlert("Success", "Message Sent. Thank you.", "Ok");
myPop.IsVisible = false;
myPop.IsEnabled = false;
} catch (Exception ex) {
await DisplayAlert("Error", "Something went wrong. Please try again.", "ok");
Console.WriteLine(ex.ToString());
}
}
private void ToggleIndicator(bool show) {
indicator.IsRunning = show;
indicator.IsVisible = show;
indicator.IsEnabled = show;
load.IsVisible = show;
}
private async Task SendEmailAsync() {
MailMessage mail = new MailMessage();
mail.From = new MailAddress("email@domain.com");
mail.To.Add("email@domain.com");
mail.Subject = "Subject";
mail.Body = user_msg;
SmtpClient SmtpServer = new SmtpClient("smtp.sendgrid.net");
SmtpServer.Port = 25;
SmtpServer.Credentials = new NetworkCredential("username", "password");
SmtpServer.EnableSsl = true;
ServicePointManager.ServerCertificateValidationCallback = delegate (object sendemail, X509Certificate certificate, X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors) {
return true;
};
await SmtpServer.SendMailAsync(mail);
}
虽然 XAML 看起来不错,但我还假设标签和指示符可见性最初是错误的
<StackLayout HorizontalOptions="Center" VerticalOptions="Center">
<Label Text="Submitting..." x:Name="load" IsVisible="False"/>
<ActivityIndicator x:Name="indicator" IsVisible="False"/>
</StackLayout>
关于c# - DisplayAlert 之前的事件指示器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50205032/
我正在用 xamarin 表单创建一个应用程序。我正在使用 Display Alert 来显示带有是/否按钮的消息。但是当用户在弹出窗口之外点击时,它会关闭。我不想关闭外部水龙头的弹出窗口。只有在用户
我的 Xamarin 应用程序中有一个通过 SMTP 服务器发送电子邮件的内容页面。 点击提交按钮发送电子邮件后,应用程序只会等待。在此等待期间,我想显示事件指示器或文本加载标签,以便用户在显示进程成
背景: 我主要是一名 SAS 程序员(一种统计软件),但我正在使用 VBA 使 excel 与 SAS 很好地配合使用。我编写了一个程序,可以使用以下代码在 SAS 中执行: *Batch Conve
我间歇性地收到以下异常: 如果我单步执行代码并且无法弄清楚如何可靠地重现它,则不会发生这种情况。内部异常为空。 我在网上搜索了一下,发现一位 C++ MFC 程序员遇到了同样的问题,但没有答案: ht
我正在研究 Excel 的 _Workbook.SaveAs API 如果有同名文件,我需要始终替换。不应有对话框询问我是否要覆盖文件。 现在,代码是: app->put_DisplayAlerts(
我的代码可以打开四个工作簿,重新格式化数据,将其粘贴到当前工作簿中,然后关闭其他工作簿。 当我关闭其他工作簿时,我会收到一个 DisplayAlert,询问我是否要保存工作簿。我想停止出现 Displ
我想使用 GetObject 打开工作簿。我还想禁用警报以在打开期间更新链接。 GetObject 失败: Application.DisplayAlerts = False Dim Wb as Wo
我有一个要求,我必须在 DisplayAlert 上显示下载状态。但是通过异步更改文本。 如何做到这一点? DisplayAlert("Download Info", "Downloading..
我正在使用显示警报来进行简单的是或否对话,但它卡住了我的 UI,我不知道为什么。 private async void BtnDeleteStockTake_Clicked(object sende
我正在尝试在 Excel 中使用 VBA 来查找和替换多个值。正在更新的字段包含 HTML 文本,因此我收到一个弹出窗口,提示我将丢失格式更改,并且当将其发布回 TFS 时,它将存储为纯文本。使用 A
此代码未显示 DisplayAlert public MainPage() { InitializeComponent(); DisplayAlert("Hey", "Welcome"
有什么方法可以关闭 Xamarin.Forms DisplayAlert没有用户交互?我无法提供 CancellationToken。那么如何取消呢? 最佳答案 您不能使用默认的 Xamarin 警报
我想在我的应用程序中发出显示警报,但我想要一个微调器而不是 ok 或其他按钮,直到我在我的代码中关闭显示警报。 我已经在互联网上搜索过,但找不到解决我问题的方法。 有人可以帮助我吗? 最佳答案 自 i
在我的移动应用程序(xamarin 表单)中,我从互联网获取数据,因此它需要互联网连接。因为我有一本在 App.xaml.cs 中初始化的字典,并且我使用来自互联网的数据,所以我需要检查互联网连接。我
已关闭。此问题旨在寻求有关书籍、工具、软件库等的建议。不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以
如何更改 Xamarin Forms DisplayAlert 对话框上的按钮文本颜色? 最佳答案 FWIW,我选择在 XAML 中创建一个新的 ContentPage 并使用 Navigation.
我在我的 xamarin 表单应用程序中使用了两个条目。我想检查用户何时单击按钮,如果这些条目为空,则显示错误。目前我正在使用以下方法: if (string.IsNullOr
当我尝试在我的应用程序的任何页面上放置警报消息时,应用程序会在 Xamarin.Forms 中显示警报之前崩溃。 async void OnAlertYesNoClicked (object send
我的电子表格中的 C 列包含将由客户选择并经常更新的值。我希望 D 列动态应用从该列表中提取的数据验证。但是,它需要包含按字母顺序排列的唯一值。 我目前正在做的是使用以下公式按字母顺序对隐藏列(BK)
我们可以在 Xamarin.Forms 中通过 DisplayAlert() 方法为警报框上显示的按钮赋予不同的颜色吗? 我可以在 android 中找到它的解决方案,但我无法进入 Xamarin.F
我是一名优秀的程序员,十分优秀!