我用了一个有Loading效果的UserControl
平时调用的时候 效果正常。。
现在我想实现一个功能。。 我现在假设 一个Button的事件 要执行5秒,我想在这5秒间执行这个loading的效果。。可是 我在头和尾巴 加上这个代码后。。貌似这个Loading动画 会卡住 。。然后直接消失。。没有达到想要的效果:
this.loading.Visibility = Visibility.Visible;
...执行代码
this.loading.Visibility = Visibility.Collapsed;
这个动画 在执行代码的时候 就不能动了- - 求解释。。
------最佳解决方案--------------------------------------------------------
简单解释一下。主线程中,只需要开始你的loading的显示,并且向系统线程池注册一下需要调用abc,这就行了。因此这个过程一瞬间就执行完毕了,主线程就可以给其它操作使用,不会造成界面卡住的现象。
然后你的方法abc在适当的时候(通常是立刻)被系统线程池执行,(子线程)它进行你要的计算操作,计算完毕再给主线程注册一个用来隐藏loading的方法(这里是采用了匿名方法的写法),这也是一瞬间不等loading隐藏也就执行完毕了。
然后最后,系统主线程的消息泵当轮询到那个消息请求,会执行这个隐藏loading的匿名方法。
整个过程中,涉及loading的两条语句在主线程执行,abc中的计算语句在子线程上执行。
------其他解决方案--------------------------------------------------------
如果你用的是4.5的版本
你可以看下 async 和 await
private async void button1_Click(object sender, EventArgs e)
{
// ExampleMethodAsync returns a Task.
await ExampleMethodAsync();
textBox1.Text += "\r\nControl returned to Click event handler.\r\n";
}
async Task ExampleMethodAsync()
{
// The following line simulates a task-returning asynchronous process.
await Task.Delay(1000);
}
http://msdn.microsoft.com/zh-cn/library/vstudio/bb397687.aspx
------其他解决方案--------------------------------------------------------
异步加载 怎么实现啊。。求。。。。。。。。。。
------其他解决方案--------------------------------------------------------
动画占用的是UI线程
------其他解决方案--------------------------------------------------------
你的代码 是异步的吗?
------其他解决方案--------------------------------------------------------
lz 可以看看 busyindicator 控件
------其他解决方案--------------------------------------------------------
不是异步的。。我就是不会异步。。能举个简单的例子吗
------其他解决方案--------------------------------------------------------
比如说你的方法是abc,那么主线程中你可以写
this.loading.Visibility = Visibility.Visible;
ThreadPool.QueueUserWorkItem(h=> abc());
而你的abc中应该写类似于
private void abc()
{
...执行代码
this.Dispatcher.BeginInvoke(delegate()
{
this.loading.Visibility = Visibility.Collapsed;
});
}
------其他解决方案--------------------------------------------------------
非常感谢。。可是 为什么总是出现 UI控件被其他线程占用的情况??
------其他解决方案--------------------------------------------------------