OpenNetcf.stopwatch -> فقط القراد يتغير ، وليس انقضاء
-
23-09-2019 - |
سؤال
لقد كنت أحاول تعقب خطأ اعتقدت أنه يتعلق بالخيط ، لكنني أعتقد بدلاً من ذلك أن هناك مشكلة في الطريقة التي أستخدم بها ساعة توقيت OpenNETCF. انا استخدم OpenNetcf.ioc في طلبي ، ولكن من أجل البساطة ، قمت بنقل الكود التالي مباشرة إلى عرض:
public partial class WorkoutView : SmartPart
{
...
private Stopwatch stopwatch;
public WorkoutView()
{ ...
stopwatch = new Stopwatch();
stopwatch.Reset();
stopwatch.Start();
WorkoutDisplayTimer = new Timer();
WorkoutDisplayTimer.Interval = 500;
WorkoutDisplayTimer.Tick += new EventHandler(WorkoutDisplayTimer_Tick);
WorkoutDisplayTimer.Enabled = true;
}
void WorkoutDisplayTimer_Tick(object sender, EventArgs e)
{ ...
stopwatch.Stop();
lbl.Text = stopwatch.ElapsedTicks.ToString() + "NOT WORKING: " + stopwatch.Elapsed.ToString();
stopwatch.Start();
}
...
}
قصة قصيرة طويلة ، بالنظر إلى ساعة توقيت في The Debugger ، فإن القيم الوحيدة التي يتم تحديثها على الإطلاق هي ElapsedTicks و Melapsed و MstartPerfCount. كل شيء آخر دائما صفر. هل هذا السلوك المتوقع؟ هل أحتاج إلى استدعاء طريقة إضافية للحصول على ساعة توقيت حساب الهيكل المنقضي؟ (ملاحظة: stalpwatch.elapsedMilliseconds هو أيضا صفر)
المحلول
نعم ، يبدو أنه خطأ ، وتحديداً في ساعة توقيت ، السطر 136.
تقرأ حاليا:
smFreqInTicks = (MILLIS_IN_TICKS * 1000) / freq;
يجب أن تقرأ:
smFreqInTicks = (MILLIS_IN_TICKS * 1000d) / freq;
في الوقت الحالي ، ينتهي smfreqinticks بأنها دائمًا صفر ، مما يقتل القيم التي تنظر إليها.
نصائح أخرى
لماذا لا تستخدم الإصدار في الإطار المدمج نفسه؟ انها في هناك من الإصدار 3.5 فصاعدا ...