- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我从另一篇文章 ( C# How to stop animated gif from continually looping ) 中找到了这个语法,但我似乎无法理解它。
中 s 和 e 的含义或目的是什么System.Drawing.ImageAnimator.Animate(txImage.Image, (s,e) => OnFrameChanged(s,e));
// start
System.Drawing.ImageAnimator.Animate(txImage.Image, (s,e) => OnFrameChanged(s,e));
// stop
System.Drawing.ImageAnimator.StopAnimate(txImage.Image, (s, e) => OnFrameChanged(s, e));
private void OnFrameChanged(object sender, EventArgs e)
{
// frame change
}
或者任何人都可以简单地解释一下。对不起,我很愚蠢,但我真的是编程新手,但我真的很想学习谢谢
最佳答案
您可以通过三种基本方式编写事件处理程序。不幸的是,该代码的作者通过不恰本地将它们混合在一起而弄错了。他应该用的是原来的C#版本1方式:
ImageAnimator.Animate(txImage.Image, OnFrameChanged);
这非常简单易懂。当然,在这种情况下您应该非常喜欢这种语法,它使调用 StopAnimate() 方法变得非常容易。为了回答你的问题,我需要展示其他两种你不应该使用的方法。在 C# 版本 2 中,匿名委托(delegate)可用于就地编写事件处理程序的代码:
ImageAnimator.Animate(txImage.Image, delegate {
// Put the OnFrameChanged code here...
});
在 C# 版本 3 中,可以使用 lambda 表达式就地编写事件处理程序:
ImageAnimator.Animate(txImage.Image, (s, e) => {
// Put the OnFrameChanged code here...
});
你问的是什么。 lambda 表达式的 (s, e) 部分表示传递给事件处理程序的两个参数,s 是 sender,e 是 EventArgs 对象。请注意,您实际上并未在 OnFrameChange 代码中使用这两个参数,因此 lambda 语法是多余的,匿名委托(delegate)也同样有效。尽管许多 C# 程序员已经停止使用它们并更喜欢在任何地方使用 lambda 表达式语法。这是公平的。即使您不使用参数,您仍然必须编写它们以说服编译器您的 lambda 是委托(delegate)的适当替代品。就像您仍然必须使用两个参数编写 OnFrameChanged 以使编译器满意一样。
理解 lambda 表达式语法可能有点像减速带,任何一本关于 C# 语言的不错的介绍性书籍都会比我解释得更好。
最后但同样重要的是,您会在 this answer 中找到一些 hackorama 代码向您展示如何在根本不使用 ImageAnimator 类的情况下暂停 PictureBox 中的动画。尽管有可能这只会增加更多问题 :)
关于c# - System.Drawing.ImageAnimator.Animate 和 System.Drawing.ImageAnimator.StopAnimate 解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17636121/
一位已退休的年长 DEC PDP 8 汇编程序员需要另一双眼睛。我创建了一个 Hello World 程序来显示家庭的图像。动画效果很好,但我希望用户能够停止动画,因此我添加了一个按钮来“暂停”图像,
我有一系列必须按顺序执行的任务,所以它们由 DispatchQueue 控制。为了通知用户他们正在吃喝玩乐,我启动了事件图标。但是,如果离开主线程,我该如何停止呢? 逻辑上我想要实现的是: overr
在我的 SignInViewController 中,我有这段代码可以在单击按钮时添加事件,在我的应用程序委托(delegate)中,我在功能完成时运行停止动画功能,我知道该功能正在运行,因为我可以让
在我的 AppDelegate 的 applicationDidEnterBackground() 中,我调用了 cocos2d::Director::getInstance()->stopAnima
好吧,我正在 Android 中开发一个地理定位应用程序。第一次运行时,我们将 map 以当前位置为中心,然后用户可以自由缩放和平移,但我们有一个按钮可以使 map 动画化并使其回到实际位置。 问题是
在我的 UIImageView 子类中,我有一个 UIActivityIndicatorView 和一个下载图像的函数,定义如下: class FooUIImageView: UIImageVie
编辑:UIActivityIndicatorView 认为它不在屏幕上...所有值都表明它不在,但是当您查看屏幕时,它就在那里。 所以...这有点让我发疯。 我正在使用 https://githu
我正在使用 UIViewPropertyAnimator 为与我的 View 的交互设置动画(在卡片之间滑动)。一切正常,直到最近我在生产中遇到以下崩溃: Fatal Exception: NSInt
首先声明,以下内容均基于cocos2d-x-2.1.4。 在cocos2d-x的HelloCpp工程中,可以看到在void AppDelegate::applicationDidEnterBackgr
我从另一篇文章 ( C# How to stop animated gif from continually looping ) 中找到了这个语法,但我似乎无法理解它。 中 s 和 e 的含义或目的是
我是一名优秀的程序员,十分优秀!