首页 > 其他分享 >WPF FPS类

WPF FPS类

时间:2024-11-13 10:29:26浏览次数:1  
标签:set private Events static FPS WPF RunTime public

public class FPSBase
{
    public static void Run()
    {
        CompositionTarget.Rendering += CompositionTarget_Rendering;
    }

    public static TimeSpan RunTime { get; private set; }
    public static int FPS { get; private set; }
    static int fps = 0;
    public static TimeSpan PreSTime { get; private set; }
    public static TimeSpan PreLogicTime { get; private set; }

    public static double Logicalnterval { get; set; } = 16d;

    private static void CompositionTarget_Rendering(object sender, EventArgs e)
    {
        RunTime = (e as RenderingEventArgs).RenderingTime;
        var span = (RunTime - PreSTime).TotalSeconds;
        if (span >= 1d)
        {
            PreSTime = RunTime;
            FPS = fps;
            fps = 0;
        }
        else
            fps++;
        if ((RunTime - PreLogicTime).TotalMilliseconds > Logicalnterval)
        {
            PreLogicTime = RunTime;
            OnLogicFrame();
        }
        OnRenderFrame();
    }

    static EventHandlerList Events = new EventHandlerList();
    static readonly object LogicFrameEventObj = new object();
    static readonly object RenderFrameEventObj = new object();
    public static event EventHandler LogicFrameEvent { add => Events.AddHandler(LogicFrameEventObj, value); remove => Events.RemoveHandler(LogicFrameEventObj, value); }
    public static event EventHandler RenderFrameEvent { add => Events.AddHandler(RenderFrameEventObj, value); remove => Events.RemoveHandler(RenderFrameEventObj, value); }
    private static void OnLogicFrame()
    {
        (Events[LogicFrameEventObj] as EventHandler)?.Invoke(null, EventArgs.Empty);
    }

    static void OnRenderFrame()
    {
        (Events[RenderFrameEventObj] as EventHandler)?.Invoke(null, EventArgs.Empty);
    }
}

 

标签:set,private,Events,static,FPS,WPF,RunTime,public
From: https://www.cnblogs.com/RedSky/p/18543369

相关文章

  • AutoCAD Blockview .net在wpf项目中的问题
    之前使用Blockview是遇到平移的问题,这几天在学习使用CommunityToolkit.MVVM框架来创建用户界面,当创建GsPreviewCtrl控件时会遇到错误,导致整个窗体不能显示,错误信息如下:**************异常文本**************System.InvalidProgramException:公共语言运行时检测到无效的......
  • 使用 Hosting 构建 WPF 程序
    .NETGenericHost是一个通用的应该程序构建方式,不只是适用于asp.netcore,可以用在任何.NET项目中。具体支持的.NET框架可以看这里NuGetGallery|Microsoft.Extensions.Hosting8.0.1.NETGenericHost-.NET|MicrosoftLearn本文用于记录使用.NETGenericHost......
  • wpf combobox绑定到enum
    搜索到这个网页在其中发现了这个方法,比较简单:publicenumRULE{[Description("Любые,безограничений")]any,[Description("Любыееслибудеттривряд")]anyThree,[Descri......
  • wpf项目使用winform控件
    环境:Win10、VS2017一、新建WPF项目  2.WPF项目添加System.Windows.Forms和WindowsFormsIntegration引用  3. 编写WPF窗体代码3.1.头部添加引用1xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"2xmlns:wfi="clr-namespace:S......
  • wpf中取消按钮的默认样式
    <Stylex:Key="TransparentButton"TargetType="Button"><SetterProperty="Background"Value="Transparent"/><SetterProperty="BorderThickness"Value="0"/><SetterP......
  • GFPS技术原理(三)广播信息
    我们知道GFPS有两个角色,Provider用于发送广播,然后Provider的广播数据在BR/EDR处于配对模式和非配对模式两种不同情况下,广播数据也是不尽相同,下面来做分析:配对模式:广播频率:处于配对模式下,Provideradvertisinginterval必须不超过100ms,也就是最少要一秒发送10次广播,这样......
  • WPF在MVVM模式下怎么实现导航功能
    在mvvm的模式下wpf通过frame实现页面跳转_哔哩哔哩_bilibili视频讲解同步可观看如下图,我们要实现点击左侧的菜单,在右侧展示不同的页面实现代码如下:一、如何从主窗体跳转到页面。1、在mainwindow.xaml的菜单栏代码里加入如下代码​ <BorderBorderBrush="#3c5254"Bord......
  • WPF 集合操作进阶:提取特定字段、转换 ObservableCollection 和过滤数据
    文章目录1.引言2.从List<T>提取特定字段3.将List<T>转换为observableCollection<T>4.过滤List<T>集合5.总结6.完整示例代码1.引言在C#开发中,集合操作是非常常见的任务,特别是在数据处理和用户界面设计中。本文将介绍如何从List<T>中提取......
  • WPF+MVVM案例实战与特效(二十六)- 3D粒子方块波浪墙效果实现
    文章目录1、案例效果2、案例实现1、文件创建2.功能代码实现3、粒子功能应用1、前端布局与样式2、代码解释2、后端功能代码1、案例效果2、案例实现1、文件创建打开Wpf_Examples项目、Models文件夹下创建3D粒子模型类ParticleCubeWaveMode......
  • WPF MVVM入门系列教程(四、数据绑定演示)
    在前面的文章中,介绍了数据绑定功能及使用方法。本文会使用一些数据绑定的实例来进行演示。演示过程中,涉及了数据模板功能,如果对数据模板功能还不熟悉,可以参考下面的链接:https://learn.microsoft.com/zh-cn/dotnet/desktop/wpf/data/data-templating-overview?view=netframeworkd......