关于WPF中UserControl的问题

wanxindavid 2012-11-23 08:58:29
我用了一个有Loading效果的UserControl

平时调用的时候 效果正常。。

现在我想实现一个功能。。 我现在假设 一个Button的事件 要执行5秒,我想在这5秒间执行这个loading的效果。。可是 我在头和尾巴 加上这个代码后。。貌似这个Loading动画 会卡住 。。然后直接消失。。没有达到想要的效果:

this.loading.Visibility = Visibility.Visible;

...执行代码

this.loading.Visibility = Visibility.Collapsed;


这个动画 在执行代码的时候 就不能动了- - 求解释。。
...全文
296 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanxindavid 2012-11-25
  • 打赏
  • 举报
回复
The calling thread cannot access this object because a different thread owns it. 总是出现这个错误
wanxindavid 2012-11-25
  • 打赏
  • 举报
回复
引用 7 楼 sp1234 的回复:
简单解释一下。主线程中,只需要开始你的loading的显示,并且向系统线程池注册一下需要调用abc,这就行了。因此这个过程一瞬间就执行完毕了,主线程就可以给其它操作使用,不会造成界面卡住的现象。 然后你的方法abc在适当的时候(通常是立刻)被系统线程池执行,(子线程)它进行你要的计算操作,计算完毕再给主线程注册一个用来隐藏loading的方法(这里是采用了匿名方法的……
非常感谢。。可是 为什么总是出现 UI控件被其他线程占用的情况??
在路上20130607 2012-11-25
  • 打赏
  • 举报
回复
如果你用的是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
  • 打赏
  • 举报
回复
简单解释一下。主线程中,只需要开始你的loading的显示,并且向系统线程池注册一下需要调用abc,这就行了。因此这个过程一瞬间就执行完毕了,主线程就可以给其它操作使用,不会造成界面卡住的现象。 然后你的方法abc在适当的时候(通常是立刻)被系统线程池执行,(子线程)它进行你要的计算操作,计算完毕再给主线程注册一个用来隐藏loading的方法(这里是采用了匿名方法的写法),这也是一瞬间不等loading隐藏也就执行完毕了。 然后最后,系统主线程的消息泵当轮询到那个消息请求,会执行这个隐藏loading的匿名方法。 整个过程中,涉及loading的两条语句在主线程执行,abc中的计算语句在子线程上执行。
  • 打赏
  • 举报
回复
比如说你的方法是abc,那么主线程中你可以写
this.loading.Visibility = Visibility.Visible;
ThreadPool.QueueUserWorkItem(h=> abc());
而你的abc中应该写类似于
private void abc()
{
    ...执行代码
     this.Dispatcher.BeginInvoke(delegate()
    {
         this.loading.Visibility = Visibility.Collapsed;
    });
}
wanxindavid 2012-11-24
  • 打赏
  • 举报
回复
引用 3 楼 luoSaiMingJavaAndC 的回复:
你的代码 是异步的吗?
不是异步的。。我就是不会异步。。能举个简单的例子吗
在路上20130607 2012-11-23
  • 打赏
  • 举报
回复
lz 可以看看 busyindicator 控件
在路上20130607 2012-11-23
  • 打赏
  • 举报
回复
你的代码 是异步的吗?
在路上20130607 2012-11-23
  • 打赏
  • 举报
回复
动画占用的是UI线程
wanxindavid 2012-11-23
  • 打赏
  • 举报
回复
异步加载 怎么实现啊。。求。。。。。。。。。。

8,757

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧