我正在创建一个我希望使用面部检测登录的应用程序。但这不是真的,它只是让ik看起来像它的扫描。 因此,当我按下LOG IN按钮时,kinect拍摄我的照片并向我显示照片,在它上方显示我正在扫描的文本。 现在我遇到了以下问题,当我按下登录按钮时,会出现扫描标签,但我想触发另一个将我带到下一页主页的事件。 所以我希望SCANNING标签出现3秒钟,然后页面应该改变。 这是我尝试过的,我使用计时器,但这并没有做任何事情。
private void ActionButton_Click(object sender, System.EventArgs eventArgs)
{
_main.TakePicture();
identifyBox.Source = _main.source.Clone();
scanningLabel.Visibility = Visibility.Visible;
_storyboard = (Storyboard)FindResource("scanningSB");
//_storyboard.Begin();
Start();
}
private void Start()
{
_tm = new Timer(3000);
_tm.Elapsed += new ElapsedEventHandler(_tm_Elapsed);
_tm.Enabled = true;
}
void _tm_Elapsed(object sender, ElapsedEventArgs e)
{
if (_tm == new Timer(3000))
{
((Timer)sender).Enabled = false;
_main.ContentPage.Children.Clear();
_main.ContentPage.Children.Add(_homeScreen);
}
}
好的,我删除了if语句,但现在它每3秒触发一个方法。 我怎样才能让它工作一次。
好吧即使这样也行,现在我的ContentPage不会改变?它给了我这个错误:调用线程无法访问此对象,因为另一个线程拥有它。 什么可能是错的?
答案 0 :(得分:5)
我认为你可以删除条件
if (_tm == new Timer(3000))
并保持简单
void _tm_Elapsed(object sender, ElapsedEventArgs e)
{
((Timer)sender).Enabled = false;
_main.ContentPage.Children.Clear();
_main.ContentPage.Children.Add(_homeScreen);
}
当你设置_tm = new Timer(3000);
时,它将设置3秒后触发事件的时间..
答案 1 :(得分:2)
将_tm_Elapse更改为:
void _tm_Elapsed(object sender, ElapsedEventArgs e)
{
if (_tm == (sender as Timer))
{
_main.ContentPage.Children.Clear();
_main.ContentPage.Children.Add(_homeScreen);
}
}
编辑回答: “我只想在3秒后发射一次”
void _tm_Elapsed(object sender, ElapsedEventArgs e)
{
if (_tm == (sender as Timer))
{
_tm.Stop();
_main.ContentPage.Children.Clear();
_main.ContentPage.Children.Add(_homeScreen);
}
}