2

電話するThread.Abortと、次の例外が発生します。

タイプ 'System.Security.Permissions.SecurityPermission、mscorlib、Version=2.0.0.0、Culture=neutral、PublicKeyToken=b77a5c561934e089' のアクセス許可の要求に失敗しました。

なぜこうなった?

4

1 に答える 1

2

Thread.Abortを呼び出すには、CAS(コードアクセスセキュリティ)権限SecurityPermission\ControlThreadが必要です。これは、ユーザーのアクセス許可とは関係ありませんが、.NETCLRによってコードに付与されたアクセス許可とは関係ありません。

ControlThreadパーミッションは、「危険な」パーミッションと見なされます。.NET 2.0のデフォルトでは、マシン上でローカルに実行されているアセンブリにのみ付与されます。アセンブリがローカルマシンの外部から読み込まれているか、ホストされているCLRインスタンス(ASP.NETなど)で実行されていると思います。いずれにせよ、アセンブリのCAS権限を増やすためのメカニズムがあります。これについてサポートが必要な場合は、アセンブリのロード方法についてより具体的にする必要があります。

とはいえ、Thread.Abortを使用してスレッドを中止することは一般的に推奨されていません。SecurityExceptionを回避するために時間を費やすのではなく、スレッドの実行を停止するための別のアプローチに投資することを検討することをお勧めします。

于 2011-08-29T12:20:09.843 に答える