2016-09-27 10 views
-1

私は現在、コンピュータサイエンスAレベルを取っているので、VB.Netを1年前から使用しているので、これを行う方法は明白です。しかし、私は、タイミングを追跡するためにthreading.thread.sleep()関数を使用するコンソールアプリケーションを開発しました。これはこれまでのところ私が見つけた最良の方法ですが、ユーザーがコンソールをすばやくドラッグすると破壊的なテストが行​​われた後、プログラムが遅くなりタイミングが間違っていました。ですから、vb.Netにコンソールウィンドウの移動を止めて、コンソールの位置を固定しておく方法はありますか?私は現在、多くのおかげで、 ダンvb.netのコンソールウィンドウを移動するユーザーを停止する方法

+0

タイマーがうまくいく可能性があります。選択肢はいくつかあります。[.NET Frameworkクラスライブラリのタイマークラスの比較](https://web.archive.org/web/20150329101415/https://msdn.microsoft.com/en-us/)雑誌/ cc164015.aspx) - 賢明に選択してください。 –

答えて

1

それがドラッグされているウィンドウを停止することは可能かもしれないが、それは間違ったアプローチでは、Visual Studioに2015

を使用しています。スレッドをスリープさせることは、タイミングデータを維持する正確な方法ではありません。

ウィンドウの移動は、アプリケーションを停止させ、標準のWindowsエクスペリエンスを妨害し始めているWindowsシステム上の唯一のアクションではありません。

私はあなたが睡眠ごとに遅延の量を増加させるコードを持っていると仮定します。

代わりに、精度を維持するために、アプリケーションがタイミングを開始するときにDateTime.Nowの値を保存する必要があります。

dim mStartTime = DateTime.Now 

次に、これとの時差を取得します。

dim elapsedMilliseconds = (DateTime.Now - mStartTime).TotalMilliseconds 

すべてのタイマー/スリープルータンは、システムの優先度/負荷のためにタイミングエラーが発生する可能性があります。この方法は、これらの誤差が累積するのを防ぎます。コンソールの変更


は、しかし、それはあなたがリサイズを使用している場合は、これをやってからユーザーを防ぐために非常に簡単です、.NET(Windows APIを使用する必要がある)から容易ではありません。アプリケーションタイプを変更する可能性があります。

+1

'DateTime.UtcNow'は、コンピュータが夏時間と標準時間の間に変更されたときにプログラムが実行されている場合、奇妙なエラーを防止します。しかし、システム時計は、他の理由、例えばいつでも変更することができる。それを修正する。 [Stopwatch](https://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch(v = vs.110).aspx)はより安全です。 –

+1

@AndrewMorton - 同意すると、StopWatchはより安全になります。興味深いことに、夏時間の変更は、すべてのタイムゾーン情報がキャッシュされているので、現在の状態のコードに影響しませんが(私はこの非常に理由があると仮定しています)。 – FloatingKiwi

関連する問題