質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

2回答

6968閲覧

WPF-TextBoxの文字入力時に発生するWin32Exceptionについて

sima_5

総合スコア6

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2018/02/24 02:07

前提・実現したいこと

C#のWPFで、テキストボックスを使用した簡単なToDoリストを作成しようとしています。
まずはxamlにTextBoxのみを配置し、デバッグ実行でキーボードから文字を入力したところ、以下の例外エラーが発生しました。

なお、exeから起動した時は、テキスト入力によりアプリが落ちるような現象は見られませんでした。

教えていただきたいのは
・例外の発生原因は何か
・解決法はあるか
・この例外は無視して良いものかどうか
・無視して良いものである場合、デバッグ時に動作を中断させない方法はあるか
です。

発生している問題・エラーメッセージ

System.ComponentModel.Win32Exception HResult=0x80004005 Message=パラメーターが間違っています。 Source=WindowsBase スタック トレース: 場所 MS.Win32.UnsafeNativeMethods.GetWindowText(HandleRef hWnd, StringBuilder lpString, Int32 nMaxCount) 場所 System.Windows.Automation.Peers.WindowAutomationPeer.GetNameCore() 場所 System.Windows.Automation.Peers.AutomationPeer.UpdateSubtree() 場所 System.Windows.ContextLayoutManager.fireAutomationEvents() 場所 System.Windows.ContextLayoutManager.UpdateLayout() 場所 System.Windows.ContextLayoutManager.UpdateLayoutCallback(Object arg) 場所 System.Windows.Media.MediaContext.InvokeOnRenderCallback.DoWork() 場所 System.Windows.Media.MediaContext.FireInvokeOnRenderCallbacks() 場所 System.Windows.Media.MediaContext.RenderMessageHandlerCore(Object resizedCompositionTarget) 場所 System.Windows.Media.MediaContext.RenderMessageHandler(Object resizedCompositionTarget) 場所 System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs) 場所 System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler) 場所 System.Windows.Threading.DispatcherOperation.InvokeImpl() 場所 System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object state) 場所 MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(Object obj) 場所 System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) (f:\dd\ndp\clr\src\BCL\system\threading\executioncontext.cs):行 954 場所 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) (f:\dd\ndp\clr\src\BCL\system\threading\executioncontext.cs):行 901 場所 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) (f:\dd\ndp\clr\src\BCL\system\threading\executioncontext.cs):行 890 場所 MS.Internal.CulturePreservingExecutionContext.Run(CulturePreservingExecutionContext executionContext, ContextCallback callback, Object state) 場所 System.Windows.Threading.DispatcherOperation.Invoke() 場所 System.Windows.Threading.Dispatcher.ProcessQueue() 場所 System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) 場所 MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) 場所 MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o) 場所 System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs) 場所 System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler) 場所 System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs) 場所 MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam) 場所 MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg) 場所 System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame) 場所 System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame) 場所 System.Windows.Application.RunDispatcher(Object ignore) 場所 System.Windows.Application.RunInternal(Window window) 場所 System.Windows.Application.Run(Window window) 場所 System.Windows.Application.Run() 場所 WpfApp1.App.Main()

該当のソースコード

<Window x:Class="WpfApp1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfApp1" mc:Ignorable="d" Title="MainWindow" Height="350" Width="525"> <StackPanel> <TextBox></TextBox> </StackPanel> </Window>

C

1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Text; 5using System.Threading.Tasks; 6using System.Windows; 7using System.Windows.Controls; 8using System.Windows.Data; 9using System.Windows.Documents; 10using System.Windows.Input; 11using System.Windows.Media; 12using System.Windows.Media.Imaging; 13using System.Windows.Navigation; 14using System.Windows.Shapes; 15 16namespace WpfApp1 17{ 18 /// <summary> 19 /// MainWindow.xaml の相互作用ロジック 20 /// </summary> 21 public partial class MainWindow : Window 22 { 23 public MainWindow() 24 { 25 InitializeComponent(); 26 } 27 } 28} 29

補足

半角英数字・全角英数字・ひらがな・カタカナ・記号・漢字などを入力してみたところ、
全角英数字・ひらがな("1","あ","k"など)を入力すると例外が発生するようでした

また、必ず発生するわけではなく、
TextBoxにフォーカスを合わせ、最初の一文字目で発生することもあれば、
数文字入力して発生することもあります。

実行環境は以下になります。
・windows10 64bit
・visualstudio2017 version 15.5.7
・.net Framework4.7

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

エラーコード 0x80004005 が出ていますが、このエラーは .NET Framework や Visual Studio が出しているものではなく Windows が出しているもので、意味は「不明なエラー」です。
反面「パラメーターが間違っています。」は .NET Framework の出しているメッセージですが、これは API は正しいという前提のもとに Windows からエラーコードが返って来るのは呼び出しパラメーターを間違ったのだろうという推測から出しているものと思われます。
ですから、この場合はエラーコードとエラーメッセージは分離して考え、メッセージは無視していいと思います。

エラーの起きている場所は

場所 MS.Win32.UnsafeNativeMethods.GetWindowText(HandleRef hWnd, StringBuilder lpString, Int32 nMaxCount)

この API 呼び出しです。
テキストボックスに入力された文字を Windows から取得しようとする際にエラーコードが返っています。

こんなところでバグが発生するとは考えにくいので、原因はバグではなく環境であろうと推測されます。
0x80004005 でググってみると、考えられる原因の一つとしてウィルス対策ソフトが挙げられていました。
デバッグ中は実行プロセスにデバッガがアタッチされるので、特定の条件がそろった時にそこからの文字列取得がスパイウエアとして判断されているのかもしれません。

ウィルス対策ソフトを一時停止して同じ問題が起こるかどうか確認してみてください。

投稿2018/02/28 01:14

編集2018/02/28 01:15
Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

拡張機能が怪しいかもしれません。

[ツール]-[オプション]-[デバッグ]-[全般]にて
□マイコードのみを有効にする にチェックを入れてみてください。

この例外は無視して良いものかどうかは貴方以外は判断できません。

投稿2018/02/24 03:23

hihijiji

総合スコア4150

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sima_5

2018/02/24 04:30

回答ありがとうございます。 マイコードのみ有効にするにチェックを入れたところ 「アプリケーションはブレークモードになっています。お使いのアプリはブレーク状態になりましたが、すべてのスレッドが外部コード (通常はシステム コードまたはフレームワーク コード) を実行していたため、表示されるコードはありません。」 という文字が表示され、やはりデバッグが途中で止まってしまうようでした。 拡張機能が怪しいとは visualstudioの拡張機能によってこの問題が起きているということでしょうか?
hihijiji

2018/02/24 04:47

完全にヤマ勘ですがありそうな可能性としては Visual Studio の拡張機能 30%, Visual Studio のインストール 10%, IME の問題 10%, セキュリティソフト 10%, その他常駐アプリ 10%, ウィルス感染 5%, OS更新プログラム関係 5%, OSその他 5%, 主記憶装置トラブル 5%, その他ハードトラブル 5% … あと WPF:例外をまとめてトラップするには?[C#/VB]@@IT http://www.atmarkit.co.jp/ait/articles/1512/16/news026.html
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問