我想延迟Windows Phone 8应用程序中进度条的出现2秒 因此,当我在2秒后没有收到响应时,如果我调用webservice,则应显示进度条。
我已使用 DispatcherTimer 实现了代码,但它没有按预期工作的接缝。
此变量绑定到ProgressBar控件的 IsEnabled 和 IsVisible 。
问题是这个代码是随机工作而不是2秒后。当我将计时器增加20秒时,即使每个响应都低于1秒,仍然会出现进度条。
private bool _isProgressBarLoading;
public bool IsProgressBarLoading
{
get
{
return _isProgressBarLoading;
}
set
{
if (_isProgressBarLoading != value)
{
if (value)
{
var timer = new DispatcherTimer { Interval = TimeSpan.FromMilliseconds(2000) };
timer.Tick += delegate
{
timer.Stop();
_isProgressBarLoading = true;
};
timer.Start();
}
else
{
_isProgressBarLoading = false;
}
NotifyOfPropertyChange(() => IsProgressBarLoading);
}
}
}
答案 0 :(得分:0)
如何在单独的线程上使用different Timer:
System.Threading.Timer myTimer = null;
private bool _isProgressBarLoading = false;
public bool IsProgressBarLoading
{
get { return _isProgressBarLoading; }
set
{
if (_isProgressBarLoading != value)
{
if (value)
{
if (myTimer == null)
{
myTimer = new System.Threading.Timer(Callback, null, 3000, Timeout.Infinite);
}
else myTimer.Change(3000, Timeout.Infinite);
// it should also work if you create new timer every time, but I think it's
// more suitable to use one
}
else
{
_isProgressBarLoading = false;
NotifyOfPropertyChange(() => IsProgressBarLoading);
}
}
}
}
private void Callback(object state)
{
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
_isProgressBarLoading = true;
NotifyOfPropertyChange(() => IsProgressBarLoading);
});
}
DispatcherTimer
正在使用主线程,我认为使用其他线程会更好。
至于你的代码,它应该工作如果看起来像这样 - 当你改变值时通知:
if (value)
{
var timer = new DispatcherTimer { Interval = TimeSpan.FromMilliseconds(2000) };
timer.Tick += delegate
{
timer.Stop();
_isProgressBarLoading = true;
NotifyOfPropertyChange(() => IsProgressBarLoading);
};
timer.Start();
}
else
{
_isProgressBarLoading = false;
NotifyOfPropertyChange(() => IsProgressBarLoading);
}