��O��1�J���ł܂Ƃ߂ď����������Ȃ邱�Ƃ��悭����B������s���l�̕��@��{�e�ł͏Љ��B
�@
�ΏہF.NET 4.0�ȍ~
�@��O�������܂Ƃ߂�1�J���ɋL�q�ł�����悢�̂ɂƎv�������Ƃ͂Ȃ����낤���H �Ⴆ�A����������O��S�ă��O�ɏ����o�������Ƃ��ł���B�ߋ��ɕM�҂́A�utry�`catch���ă��M���O����R�[�h��S�Ẵ��\�b�h�ɏ����v�Ƃ����R�[�f�B���O���[���ɑ����������Ƃ�����B����Ȗʓ|�Ȃ��Ƃ����Ȃ���Ȃ�Ȃ��̂��낤���H �܂��A�Ⴆ�A��������Ȃ�������O���܂Ƃ߂ăg���b�v���A�\�Ȃ���̗�O�����ăv���O�����̎��s���p���������A�p���������Ȃ���[�U�[�t�����h���[�ȃ��b�Z�[�W���o���Ă���v���O�������I���������A�Ƃ������Ƃ����邾�낤�B
�@��������Ȃ�������O���܂Ƃ߂ăg���b�v������@�ɂ��āA.NET 2.0�^Windows�t�H�[���̏ꍇ�́u.NET TIPS�F�K�ɏ�������Ȃ�������O���L���b�`����ɂ́H�v�������������������B
�@�{�e�ł́A.NET 4.0�ȍ~�̐V�@�\���g����WPF�ŗ�O���܂Ƃ߂ăg���b�v������@�����ďЉ��B�Ȃ��AUI�X���b�h�Ŕ��������O�̘b�������āA�R���\�[���v���O������Web�A�v���P�[�V�����Ȃǂł����l�ł���B
�@�܂��A�{�e�̃T���v���́uWindows desktop code samples�F.NET Tips #1122�v����_�E�����[�h�ł���B���̉摜�́A���̎��s��ł���B
�@�{��ɓ���O�ɁA.NET 4.5�ł̎d�l�ύX�̘b�����Ă����Ȃ��Ă͂Ȃ�Ȃ��B
�@�������̋L�q�́A.NET 4.0�œ������ꂽ�^�X�N���C�u�����iTPL�j�̗��p�������ʓI�ɂȂ��Ă����i�u.NET TIPS�FWPF�^Windows�t�H�[���F���Ԃ̂����鏈�����o�b�N�O���E���h�Ŏ��s����ɂ́H�iasync�^await�ҁj�v�j�B�Ƃ��낪�A���̗�O�����Ɋւ��ẮA.NET 4.5�ő傫�Ȏd�l�ύX���������̂��B
�@�o�b�N�O���E���h�^�X�N�̊�����ҋ@����iawait�L�[���[�h��System.Threading.Tasks���O��Ԃ�Task�N���X��Wait���\�b�h���g���j�ꍇ�ɂ́A�o�b�N�O���E���h�^�X�N�Ŕ���������O���Ăяo�����̃X���b�h�ɑ�����B����ɂ͕ύX���Ȃ��B
�@�o�b�N�O���E���h�^�X�N�̊�����ҋ@���Ȃ��ꍇ�ɂ́A���̂悤�Ɏd�l���ς���Ă���B
�@����.NET 4.5�̓���́A.NET 4.0�Ɠ������������悤�ɕύX�ł���B�{�e�ł́A.NET 4.0�Ɠ�������ɕύX���Ă����B����ɂ͊��ϐ���W�X�g����ݒ肷����@�����邪�A�����ł͓�����ɂ�炸�A�v�����Ƃɐݒ肷����@��p����B.NET 4.5�̃v���W�F�N�g�̏ꍇ�́AApp.config�t�@�C����ThrowUnobservedTaskExceptions��true�ɐݒ肵�Ă����Ă��炢�����i���̃R�[�h�j�B
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
�c�c�ȗ��i�����̋L�q�j�c�c
<runtime>
<ThrowUnobservedTaskExceptions enabled="true"/>
</runtime>
</configuration>
�@AppDomain�N���X�iSystem���O��ԁj��FirstChanceException�C�x���g���g���悢�B
�@�����.NET 4.0�̐V�@�\�ł���Btry�`catch�\���ŗ�O���L���b�`���������O�ɁA��O�����������Ƃ����ʒm������̂��B�������A���̗�O���������邱�Ƃ͂ł��Ȃ��B�܂��A�}�l�[�W�R�[�h�Ŕ���������O�݂̂ł���B���������S�Ă̗�O�����M���O����Ƃ������p�r�ɗ��p�ł���i�c��ȗʂɂȂ�̂ŊJ�����Ɍ��肵�������悢�j�B
�@����FirstChanceException�C�x���g���g���ă��b�Z�[�W�{�b�N�X���o���R�[�h��͎��̂悤�ɂȂ�B
public partial class App : Application
{
public App()
{
// �}�l�[�W�R�[�h���ŗ�O���X���[�����ƍŏ��ɕK����������i.NET 4.0���j
AppDomain.CurrentDomain.FirstChanceException
+= CurrentDomain_FirstChanceException;
}
private void CurrentDomain_FirstChanceException(
object sender,
System.Runtime.ExceptionServices.FirstChanceExceptionEventArgs e)
{
string errorMember = e.Exception.TargetSite.Name;
string errorMessage = e.Exception.Message;
string message = string.Format(
@"��O��{0}�Ŕ����B�v���O�����͌p�����܂��B
�G���[���b�Z�[�W�F{1}",
errorMember, errorMessage);
MessageBox.Show(message, "FirstChanceException",
MessageBoxButton.OK,MessageBoxImage.Information);
}
}
Class Application
Public Sub New()
' �}�l�[�W�R�[�h���ŗ�O���X���[�����ƍŏ��ɕK����������i.NET 4.0���j
AddHandler AppDomain.CurrentDomain.FirstChanceException,
AddressOf CurrentDomain_FirstChanceException
End Sub
Private Sub CurrentDomain_FirstChanceException(
sender As Object,
e As Runtime.ExceptionServices.FirstChanceExceptionEventArgs)
Dim errorMember As String = e.Exception.TargetSite.Name
Dim errorMessage As String = e.Exception.Message
Dim message As String = String.Format(
"��O��{0}�Ŕ����B�v���O�����͌p�����܂��B" + vbCrLf _
+ "�G���[���b�Z�[�W�F{1}",
errorMember, errorMessage)
MessageBox.Show(message, "FirstChanceException",
MessageBoxButton.OK, MessageBoxImage.Information)
End Sub
End Class
�@Application�N���X�iSystem.Windows���O��ԁj��DispatcherUnhandledException�C�x���g���g���悢�B
�@�����WPF�o�ꎞ����̋@�\�ł���BWindows�t�H�[����Application�N���X�iSystem.Windows.Forms���O��ԁj��ThreadException�C�x���g�ɑ���������̂��BUI�X���b�h�Ŕ���������O����������Ȃ������ꍇ�ɁA���̃C�x���g����������B
�@DispatcherUnhandledException�C�x���g�̃n���h���[���\�b�h�ł́A��O�������ς݂ɂ��邱�Ƃ��ł���itry�`catch�u���b�N�ŗ�O���L���b�`���ă��X���[���Ȃ����Ƃɑ����j�B����ɂ́A������DispatcherUnhandledExceptionEventArgs�I�u�W�F�N�g�iSystem.Windows.Threading���O��ԁj��Handled�v���p�e�B��true��ݒ肷��B
�@����DispatcherUnhandledException�C�x���g���g���ă��b�Z�[�W�{�b�N�X���o���R�[�h��͎��̂悤�ɂȂ�B�����ł́A���b�Z�[�W�{�b�N�X�Łm�͂��n�{�^�����N���b�N����Ɨ�O�������ς݂ɂ��ăv���O�������p������悤�ɂ��Ă���B
public partial class App : Application
{
public App()
{
// UI�X���b�h�Ŏ��s����Ă���R�[�h�ŏ�������Ȃ������甭������i.NET 3.0���j
this.DispatcherUnhandledException += App_DispatcherUnhandledException;
}
private void App_DispatcherUnhandledException(
object sender,
System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
{
string errorMember = e.Exception.TargetSite.Name;
string errorMessage = e.Exception.Message;
string message = string.Format(
@"��O��{0}�Ŕ����B�v���O�������p�����܂����H
�G���[���b�Z�[�W�F{1}",
errorMember, errorMessage);
MessageBoxResult result
= MessageBox.Show(message, "DispatcherUnhandledException",
MessageBoxButton.YesNo, MessageBoxImage.Warning);
if(result == MessageBoxResult.Yes)
e.Handled = true;
}
}
Class Application
Public Sub New()
' UI�X���b�h�Ŏ��s����Ă���R�[�h�ŏ�������Ȃ������甭������i.NET 3.0���j
AddHandler Me.DispatcherUnhandledException,
AddressOf App_DispatcherUnhandledException
End Sub
Private Sub App_DispatcherUnhandledException(
sender As Object,
e As System.Windows.Threading.DispatcherUnhandledExceptionEventArgs)
Dim errorMember As String = e.Exception.TargetSite.Name
Dim errorMessage As String = e.Exception.Message
Dim message As String = String.Format(
"��O��{0}�Ŕ����B�v���O�������p�����܂����H" + vbCrLf _
+ "�G���[���b�Z�[�W�F{1}",
errorMember, errorMessage)
Dim result As MessageBoxResult _
= MessageBox.Show(message, "DispatcherUnhandledException",
MessageBoxButton.YesNo, MessageBoxImage.Warning)
If (result = MessageBoxResult.Yes) Then
e.Handled = True
End If
End Sub
End Class
�@TaskScheduler�N���X�iSystem.Threading.Tasks���O��ԁj��UnobservedTaskException�C�x���g���g���悢�B
�@�����.NET 4.0�̐V�@�\�ł���B�o�b�N�O���E���h�^�X�N�Ŕ���������O����������Ȃ������ꍇ�ɁA���̃C�x���g�n���h���[�ŗ�O�������ł���i.NET 4.5�ł��O�q�����ݒ�ɊW�Ȃ������ł���B�O�q�����ݒ�́A���̃C�x���g�n���h���[�ŗ�O�������ς݂Ƃ��Ȃ������ꍇ�Ƀv���O�������I�����邩�ǂ����Ƃ����Ⴂ�ɂȂ�j�B�������A���̃C�x���g���Ăяo�����̂́A�o�b�N�O���E���h�^�X�N�̃C���X�^���X���j�������Ƃ��ł���B�ʏ�̓V�X�e���̃K�x�[�W�R���N�^�ɔj����C���Ă��邽�߁A�Ăяo�����^�C�~���O�͕s��ł���B�A�v���P�[�V�������̂���ɏI�����Ă��܂��A�C�x���g�n���h���[���Ăяo����Ȃ��܂܂ɂȂ�\��������̂Œ��ӂ��Ăق����B
�@UnobservedTaskException�C�x���g�̃n���h���[���\�b�h�ł́A��O�������ς݂Ƃ��邱�Ƃ��ł���B����ɂ́A������UnobservedTaskExceptionEventArgs�I�u�W�F�N�g�iSystem.Threading.Tasks���O��ԁj��SetObserved���\�b�h���Ăяo���悢�B
�@����UnobservedTaskException�C�x���g���g���ă��b�Z�[�W�{�b�N�X���o���R�[�h��͎��̂悤�ɂȂ�B�����ł́A���b�Z�[�W�{�b�N�X�Łm�͂��n�{�^�����N���b�N����Ɨ�O�������ς݂ɂ��ăv���O�������p������悤�ɂ��Ă���B
public partial class App : Application
{
public App()
{
// �o�b�N�O���E���h�^�X�N���ŏ�������Ȃ������甭������i.NET 4.0���j
TaskScheduler.UnobservedTaskException
+= TaskScheduler_UnobservedTaskException;
}
private void TaskScheduler_UnobservedTaskException(
object sender,
UnobservedTaskExceptionEventArgs e)
{
string errorMember = e.Exception.InnerException.TargetSite.Name;
string errorMessage = e.Exception.InnerException.Message;
string message = string.Format(
@"��O���o�b�N�O���E���h�^�X�N��{0}�Ŕ����B�v���O�������p�����܂����H
�G���[���b�Z�[�W�F{1}",
errorMember, errorMessage);
MessageBoxResult result
= MessageBox.Show(message, "UnobservedTaskException",
MessageBoxButton.YesNo, MessageBoxImage.Warning);
if (result == MessageBoxResult.Yes)
e.SetObserved();
}
}
Class Application
Public Sub New()
' �o�b�N�O���E���h�^�X�N���ŏ�������Ȃ������甭������i.NET 4.0���j
AddHandler TaskScheduler.UnobservedTaskException,
AddressOf TaskScheduler_UnobservedTaskException
End Sub
Private Sub TaskScheduler_UnobservedTaskException(
sender As Object,
e As UnobservedTaskExceptionEventArgs)
Dim errorMember As String = e.Exception.InnerException.TargetSite.Name
Dim errorMessage As String = e.Exception.InnerException.Message
Dim message As String = String.Format(
"��O���o�b�N�O���E���h�^�X�N��{0}�Ŕ����B�v���O�������p�����܂����H" + vbCrLf _
+ "�G���[���b�Z�[�W�F{1}",
errorMember, errorMessage)
Dim result As MessageBoxResult _
= MessageBox.Show(message, "UnobservedTaskException",
MessageBoxButton.YesNo, MessageBoxImage.Warning)
If (result = MessageBoxResult.Yes) Then
e.SetObserved()
End If
End Sub
End Class
�@AppDomain�N���X��UnhandledException�C�x���g���g���悢�B
�@����́A.NET Framework�ɍŏ����炠��@�\���B��������Ȃ�������O������ꍇ�ɁA�{�e�ŏЉ���l�̃C�x���g�̒��ŁA�Ō�ɒʒm�����B�������AFirstChanceException�Ɠ��l�ɁA���̗�O���������邱�Ƃ͂ł��Ȃ��B�قƂ�ǂ̏ꍇ�A���̃C�x���g�n���h���[���甲�������_�Ńv���O�����͏I�����Ă��܂��B
�@����UnhandledException�C�x���g���g���ă��b�Z�[�W�{�b�N�X���o���R�[�h��͎��̂悤�ɂȂ�B
public partial class App : Application
{
public App()
{
// ��O����������Ȃ������甭������i.NET 1.0���j
AppDomain.CurrentDomain.UnhandledException
+= CurrentDomain_UnhandledException;
}
private void CurrentDomain_UnhandledException(
object sender,
UnhandledExceptionEventArgs e)
{
var exception = e.ExceptionObject as Exception;
if (exception == null)
{
MessageBox.Show("System.Exception�Ƃ��Ĉ����Ȃ���O");
return;
}
string errorMember = exception.TargetSite.Name;
string errorMessage = exception.Message;
string message = string.Format(
@"��O��{0}�Ŕ����B�v���O�����͏I�����܂��B
�G���[���b�Z�[�W�F{1}",
errorMember, errorMessage);
MessageBox.Show(message, "UnhandledException",
MessageBoxButton.OK, MessageBoxImage.Stop);
Environment.Exit(0);
}
}
Class Application
Public Sub New()
' ��O����������Ȃ������甭������i.NET 1.0���j
AddHandler AppDomain.CurrentDomain.UnhandledException,
AddressOf CurrentDomain_UnhandledException
End Sub
Private Sub CurrentDomain_UnhandledException(
sender As Object,
e As UnhandledExceptionEventArgs)
Dim exception = TryCast(e.ExceptionObject, Exception)
If (exception Is Nothing) Then
MessageBox.Show("System.Exception�Ƃ��Ĉ����Ȃ���O")
Return
End If
Dim errorMember As String = exception.TargetSite.Name
Dim errorMessage As String = exception.Message
Dim message As String = String.Format(
"��O��{0}�Ŕ����B�v���O�����͏I�����܂��B" + vbCrLf _
+ "�G���[���b�Z�[�W�F{1}",
errorMember, errorMessage)
MessageBox.Show(message, "UnhandledException",
MessageBoxButton.OK, MessageBoxImage.Stop)
Environment.Exit(0)
End Sub
End Class
�@��O���܂Ƃ߂Ĉ�����i��.NET 4.0�Œlj�����Ă���B�{�e�ł͎l�̕��@���Љ���B
�@��O�����O�ɏ������ނɂ́A��O��������FirstChanceException�C�x���g���A�A�v���P�[�V�����I�����O��UnhandledException�C�x���g���K���Ă���i���̓�͗�O������m�邱�Ƃ��ł��邾���ŁA��O�������ς݂ɂ��邱�Ƃ͂ł��Ȃ��j�B
�@��������O���g���b�v������Ń��J�o�����������݂āA���ꂪ���������Ƃ��Ƀv���O�������p��������ɂ�DispatcherUnhandledException�C�x���g��UnobservedTaskException�C�x���g�����p�ł���B
���p�\�o�[�W�����F.NET Framework 4.0�ȍ~
�J�e�S���FWPF�@�����ΏہF��O
�g�p���C�u�����FAppDomain�N���X�iSystem���O��ԁj
�g�p���C�u�����FApplication�N���X�iSystem.Windows���O��ԁj
�g�p���C�u�����FTaskScheduler�N���X�iSystem.Threading.Tasks���O��ԁj
�֘ATIPS�F�K�ɏ�������Ȃ�������O���L���b�`����ɂ́H
�֘ATIPS�FWPF�^Windows�t�H�[���F���Ԃ̂����鏈�����o�b�N�O���E���h�Ŏ��s����ɂ́H
�u.NET TIPS�v
Copyright© Digital Advantage Corp. All Rights Reserved.