Tag: .net

如何消除动画撕裂?

我在WinForms应用程序中以18.66666运行动画…每秒帧数(它与140 BPM的音乐同步,这就是为什么帧速率很奇怪)。 动画的每个单元都是预先计算的,动画由高分辨率多媒体计时器驱动。 动画本身很流畅,但是我看到了大量的“撕裂”,或者是因为屏幕刷新中途被cels捕获而导致的文物。 当我获取我的程序渲染的一组cels并将它们写出到AVI文件,然后在Windows Media Player中播放AVI文件时,我看不到任何撕裂。 我假设WMP平滑播放文件,因为它使用DirectX(或其他东西)并且能够将渲染与屏幕的刷新活动同步。 它不会改变帧速率,因为动画与音频保持同步。 这是为什么WMP能够渲染动画而不会撕裂,或者我错过了什么? 有没有什么方法可以使用DirectX(或其他东西),以使我的程序能够知道当前扫描线的位置,如果是,有什么方法可以使用该信息消除撕裂而不实际使用DirectX用于显示cels? 或者我是否必须完全使用DirectX进行渲染才能解决此问题? 更新 :忘了细节。 我的应用程序使用Graphics.DrawImage将每个单元格渲染到PictureBox上。 这是否比使用BitBlt慢得多,这样我可以通过使用BitBlt来消除至少一些撕裂? 更新2 :我看到的效果肯定不是闪烁(这与撕裂不同)。 我的面板是双缓冲的,为AllPaintingInWmPaint,UserPaint,OptimizedDoubleBuffer等设置控件样式,覆盖onPaintBackGround等等。 所有这些都是消除闪烁所必需的,但撕裂的问题仍然存在。 当动画具有非常快速移动的物体或物体从非常快速地从亮到暗变化时,它尤其明显。 当物体缓慢移动并且不会快速改变颜色时,撕裂效果就不那么明显了(因为连续的cels总是非常相似)。

由于在调用Application.Exit()时修改集合而导致的System.InvalidOperationException

我有这个非常,非常奇怪的错误,我从来没有能够确定(它很少发生)。 基本上,我有一个C#应用程序在退出时随机抛出一个未知的exception。 我这次设法在调试器中捕获它,结果是调用Application.Exit()抛出System.InvalidOperationException并带有以下消息: mscorlib.dll中发生了’System.InvalidOperationException’类型的第一次机会exception 补充信息:收集已修改; 枚举操作可能无法执行。 我不确定这个据称被修改的集合是什么 ,或者修改它的是谁。 堆栈跟踪不是很有用: mscorlib.dll!System.Collections.ArrayList.ArrayListEnumeratorSimple.MoveNext()+ 0x13f bytes System.Windows.Forms.dll!System.Windows.Forms.Application.ExitInternal()+ 0x112 bytes System.Windows.Forms.dll!System。 Windows.Forms.Application.Exit(System.ComponentModel.CancelEventArgs e)+ 0x65字节 知道如何找出哪些ArrayList已被修改? 我不认为这是我正在做的任何事情,更可能是我正在做的一个动作,即在MS没有预料到的操作过程中修改.NET框架的底层状态。

为什么我会遇到exception:在webclient上尝试了太多的自动重定向?

在form1的顶部,我做了: WebClient Client; 然后在构造函数中: Client = new WebClient(); Client.DownloadFileCompleted += Client_DownloadFileCompleted; Client.DownloadProgressChanged += Client_DownloadProgressChanged; 然后我有这个方法我每分钟打电话: private void fileDownloadRadar() { if (Client.IsBusy == true) { Client.CancelAsync(); } else { Client.DownloadProgressChanged += Client_DownloadProgressChanged; Client.DownloadFileAsync(myUri, combinedTemp); } } 每隔几分钟它就会从网站上下载一张图像。 这一切都工作超过24小时没有问题,直到现在在下载完成的事件中抛出此exception: private void Client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e) { if (e.Error != null) { timer1.Stop(); span = new TimeSpan(0, (int)numericUpDown1.Value, […]

有没有办法在C#中挂钩托管函数,就像我在C ++中使用非托管函数一样?

在C ++中,我将得到函数的地址,并将前几个字节覆盖到jmp到我的函数,做一些事情,恢复原始字节,并调用原始函数。 我可以在C#中做这样的事吗?

为什么Enumerator类上的Reset()方法必须抛出NotSupportedException()?

从我在http://csharpindepth.com/Articles/Chapter6/IteratorBlockImplementation.aspx上看到的,以及Jon Skeet的文章,c#规范本身就是这样说的。 那是什么原因?

你应该在课堂上使用访问者属性,还是只从课堂外使用?

我有一个类’Data’,它使用getter来访问某个数组。 如果数组为null,那么我希望Data访问该文件,填充数组,然后返回特定值。 现在这是我的问题: 在创建getter和setter时,您是否也应该使用相同的访问器属性作为访问该arrays的方式(在本例中)? 或者你应该直接访问数组? 我在类中使用访问器的问题是,当调用类在Data.array中查找某些信息时,我得到无限循环,getter发现数组为null,所以从文件中获取它,并且该函数结束再次从Data中调用getter,数组再次为null,并且我们陷入无限循环。 编辑: 那么对此没有官方立场吗? 我看到不使用具有文件访问权限的Accessors的智慧,但是你们中的一些人总是说要在类中使用访问器,而其他人则说从不使用类中的访问器……… ……………………………..

将焦点设置为.NET UserControl ……?

我正在创建一个从UserControl派生的自定义控件,我想将焦点设置为。 自定义控件包含一个ComboBox控件,我在它旁边绘制一些字符串。 ComboBox可以获得焦点,但我希望能够将焦点设置为UserControl本身。 如果它具有焦点,我的OnPaint处理程序设置为稍微不同地绘制控件,但是当我创建自定义控件时它从父窗体调用CanFocus()并返回false。 是否有财产或其他东西?

当.NET不在垃圾收集(GC)中时,如何捕获.NET进程的进程内存转储

当捕获转储文件并对其进行分析时(例如在WinDbg中),我经常会收到警告:数据可能不准确,或者命令可能无法访问,因为当收集转储文件时,进程位于GC的中间。 在进行内存分析时,我们经常这样做,因为进程中的内存很高而内存压力很高,我猜这会强制.NET到GC。 如何在GC期间避免转储? 有没有办法知道何时可以安全地捕获转储文件?

LINQ – 向结果添加属性

有没有办法将属性添加到除以下内容之外的Linq查询结果的对象? var query = from x in db.Courses select new { x.OldProperty1, x.OldProperty2, x.OldProperty3, NewProperty = true }; 我想这样做而不列出我对象的所有当前属性。 有许多属性,我不想在我改变课程时更新此代码。 我还在学习LINQ,感谢您的建议。

在Switch语句中使用.StartsWith?

我正在处理一个Switch语句,并且有两个条件需要查看值是否以特定值开头。 Switch语句就是这样的。 错误说“不能将bool类型转换为字符串”。 任何人都知道我是否可以在Switch中使用StartsWith或者我是否需要使用If … Else语句? switch(subArea) { case “4100”: case “4101”: case “4102”: case “4200”: return “ABC”; case “600A”: return “XWZ”; case subArea.StartsWith(“3*”): case subArea.StartsWith(“03*”): return “123”; default: return “ABCXYZ123”; }