我有一个点击事件,一旦点击一个按钮,手机会振动。这通常很有效,除非有时振动不会停止,直到我完全关闭应用程序。我想给应用程序一些时间来完成它的振动,然后继续使用方法的其余部分,但我根本不想阻止UI。我怎么能完成这个
MainPage.xaml.cs中
void newButton_Click(object sender, EventArgs e)
{
//Button vibration
if (Settings.EnableVibration.Value) //boolean flag to tell whether to vibrate or not
{
VibrateController.Default.Start(TimeSpan.FromMilliseconds(100));
//place vibration stop here?
}
this.NavigationService.Navigate(new uri("/NewPage.xaml", UriKind.Relate));
}
我已经尝试过VibrationController.Default.Stop();但这完全消除了振动。有没有办法简单地等到振动完成后再导航到新页面,或者做该方法应该执行的其他任何操作?有关此实施或其他建议的任何建议或建议吗?
答案 0 :(得分:0)
您可以使用异步来阻止阻止UI。而不是实际阻止UI线程,您需要安排一个动作从现在起100ms再次发生。将延期添加到Task.Delay
来电可以做到这一点:
void newButton_Click(object sender, EventArgs e)
{
Action navigate = () =>
this.NavigationService.Navigate(new uri("/NewPage.xaml", UriKind.Relate));
if (Settings.EnableVibration.Value) //boolean flag to tell whether to vibrate or not
{
VibrateController.Default.Start();
Task.Delay(100).ContinueWith(t =>
{
VibrationController.Default.Stop();
navigate();
});
}
else
navigate();
}
答案 1 :(得分:0)
.NET在BackgroundWorker
类中方便地包装了这个功能。
private void SomeMethod()
{
// Create backgroundworker
BackgroundWorker bw = new BackgroundWorker();
// Attach event handler
bw.DoWork += bw_DoWork;
// Run Worker
bw.RunWorkerAsync();
}
private void bw_DoWork(object sender, DoWorkEventArgs e)
{
// Do background stuff here
}
它还支持进度更新并触发完成事件,据我所知,此功能扩展到Windows Phone。所有这些都包含在MSDN文章中。
我猜你想要做的是在BackgroundWorker中调用vibrate,你可以监听RunWorkerCompletedEvent,它将在完成时触发。此外,您可以愉快地暂停此“线程”,它不会干扰用户界面。