この修正プログラム ロールアップを適用するには、次のサポート技術情報記事に移動し、適切な修正プログラムのロールアップをダウンロードします。
2925383 2925383 の修正プログラム ロールアップは、.NET Framework の Windows では 4.5.1 の使用
概要
この資料では、4.5.1 の Microsoft.NET Framework で利用可能な 2908385 の修正プログラム ロールアップについて説明します。修正プログラムにより解決される問題の詳細については、「関連情報」セクションを参照してください。
この修正プログラム ロールアップでは、次のオペレーティング システムの利用可能です。
-
Windows 8
-
Windows Server 2012
詳細
修正プログラムの情報
サポートされている修正プログラムはマイクロソフトから現在入手可能です。ただし、それはこの資料に記載された問題のみを修正するものです。この特定の問題が発生したシステムにのみ適用してください。
この問題を解決するには、修正プログラムを入手するよう、Microsoft カスタマー サポート サービスに問い合わせてください。Microsoft カスタマー サポート サービスの電話番号とサポート コストに関する情報の完全なリストは、次のマイクロソフト web サイトを参照してください。
http://support.microsoft.com/contactus/?ws=support注: 特別な場合では、まれに通常サポート コールの発生に料金 Microsoft Support 担当者は、特定の更新で問題が解決されると判断した。追加の質問および問題の特定のアップデートの対象にはなりませんが、通常のサポート料金が適用されます。
必要条件
この修正プログラムを適用するには、.NET Framework がインストールされている 4.5.1 が必要です。
再起動の必要性
影響を受けるファイルを使用している場合にこの修正プログラムを適用した後にコンピューターを再起動する必要があります。この修正プログラムを適用する前に、すべての.NET Framework ベースのアプリケーションを閉じることをお勧めします。
修正プログラムの置き換えに関する情報
この修正プログラム パッケージでは、以前にリリースされた修正プログラム パッケージは置き換えられません。
この修正プログラム ロールアップ パッケージで解決される問題
問題 1
Symptoms
NumericUpDownコントロールのValueChangedイベントのハンドラーから、 Application.DoEventsメソッドを呼び出すことを想定しています。たとえば、次のコードを使用します。private void numericUpDown1_ValueChanged(object sender, EventArgs e){
for (int i = 0; i < 10; i++)
{
Application.DoEvents();
Thread.Sleep(10);
}
}
ときに、数秒の上向きまたは下向きの矢印ボタンが押された、コントロールは、繰り返しインクリメントまたはデクリメントを生成するタイマーを作成します。Application.DoEventsでは、タイマー刻みがもう一度処理されます。これには、新しいValueChangedイベントが発生します。次に、タイマーの tick イベント ハンドラーを再入力します。タイマーが、スタックの下部にあるハンドラーで破棄されるが、再利用してマウス ボタンが解放されると、他のハンドラーによって、スタックが展開されるようです。これは、null 参照の例外やクラッシュします。
回避策
この問題を回避するには、タイマー イベントが処理された後に、 Application.DoEvents() を非同期的に呼び出すために BeginInvokeを使用します。たとえば、既定の動作をオーバーライドするのには次のクラスを使用します。public class MyNumericUpDown : System.Windows.Forms.NumericUpDown{
public NumericUpDown() : base()
{
}
protected override void OnValueChanged(EventArgs e)
{
// run the handler as a separate event to prevent re-entrance to prevent a NullRef when hitting.
if (IsHandleCreated)
BeginInvoke(new Action(() => base.OnValueChanged(e)));
else
base.OnValueChanged(e);
}
}
注: 一般に、ことを再入力するメッセージ ループ (Application.DoEvents) (ValueChangedは