"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية إنشاء مؤقت C# عالي الدقة وإشارة الفاصل الزمني للحدث

كيفية إنشاء مؤقت C# عالي الدقة وإشارة الفاصل الزمني للحدث

نشر في 2025-04-14
تصفح:200

How Can I Create a High-Resolution Timer with Event-Based Interval Signaling in C#?

إنشاء مؤقت عالي الدقة دقيق مع معالجة الأحداث في C#

تفاصيل هذه المقالة بناء مؤقت عالي الدقة في C# يؤدي إلى حدوث حدث على فترات محددة ، مما يوفر تحكمًا أدق من فئة System.Timer . سنستكشف القيود المفروضة على خيارات .NET الحالية ونقدم حلًا باستخدام واجهة برمجة تطبيقات Windows Multimedia Timer.

بينما يوفر فئة STOPLEWATCH

قياس وقت عالي الدقة ، فهي غير مصممة للحدث الذي يشغل فترات زمنية دقيقة. يفتقر إطار .NET نفسه إلى ما يعادل احتياجاتنا المباشرة. لذلك ، سنستفيد من واجهة برمجة تطبيقات Windows Multimedia Timer ، والتي تم تحسينها لتوقيت الأحداث. تنفيذ مؤقت عالي الدقة باستخدام واجهة برمجة تطبيقات Timer Multimedia

أدناه هو تطبيق C# باستخدام واجهة برمجة تطبيقات Timer Multimedia:

باستخدام النظام ؛ باستخدام System.Runtime.InteropServices ؛ الطبقة متعددة الوسائط: idisposable { بول خاص التخلص = خطأ ؛ الفاصل الزمني الخاص ، القرار ؛ خاص Uint Timerid ؛ استدعاء خاص ReadOnly MultimediatimerCallback ؛ المندوب العام void multimediatimercallback (Uint utimerid ، Uint UMSG ، intptr dwuser ، uint dw1 ، uint dw2) ؛ الحدث العام eventHandler timerelapsed ؛ الوسائط المتعددة العامة () { Callback = جديد متعدد الوسائط (TimerCallbackMethod) ؛ القرار = 5 ؛ // الدقة الافتراضية (مللي ثانية) الفاصل = 10 ؛ // الفاصل الافتراضي (مللي ثانية) } ~ multimediatimer () {dispose (false) ؛ } الفاصل الزمني العام { الحصول على {فاصل الإرجاع ؛ } تعيين { checkDisposed () ؛ إذا (القيمة> 0) الفاصل الزمني = القيمة ؛ } } قرار الباحث العام { الحصول على {Return Dentolly ؛ } تعيين { checkDisposed () ؛ if (value> 0 && value using System; using System.Runtime.InteropServices; class MultimediaTimer : IDisposable { private bool disposed = false; private int interval, resolution; private uint timerId; private readonly MultimediaTimerCallback Callback; public delegate void MultimediaTimerCallback(uint uTimerID, uint uMsg, IntPtr dwUser, uint dw1, uint dw2); public event EventHandler TimerElapsed; public MultimediaTimer() { Callback = new MultimediaTimerCallback(TimerCallbackMethod); Resolution = 5; // Default resolution (milliseconds) Interval = 10; // Default interval (milliseconds) } ~MultimediaTimer() { Dispose(false); } public int Interval { get { return interval; } set { CheckDisposed(); if (value > 0) interval = value; } } public int Resolution { get { return resolution; } set { CheckDisposed(); if (value > 0 && value اعتبارات مهمة:

تتفاعل واجهة برمجة تطبيقات Timer Multimedia مع إعدادات على مستوى النظام ؛ يمكن أن تؤثر التعديلات على أداء النظام. مراقبة تواتر المؤقت لضمان مطابقة الفاصل الزمني المستهدف. تذكر أن Windows ليس نظام تشغيل في الوقت الفعلي ، لذلك قد يؤثر تحميل النظام على دقة الموقت.

خاتمة

توفر واجهة برمجة تطبيقات Timer Multimedia آلية قوية لإنشاء أجهزة ضبط الوقت عالية الدقة مع إشارات قائمة على الأحداث في C#، معالجة السيناريوهات حيث يكون التوقيت الدقيق أمرًا بالغ الأهمية. على الرغم من أنها ليست ميزة .NET أصلية ، فإن قدراتها تجعلها أداة قيمة لمتطلبات توقيت محددة.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3