kurodenimu / PersonalNewsSiteSupportTool

PersonalNewsSiteSupportTool
Apache License 2.0
0 stars 0 forks source link

クリップボード操作時に異常終了 #49

Closed kurodenimu closed 3 years ago

kurodenimu commented 3 years ago

2021-08-04 07:18:57.1375|ERROR|PersonalNewsSiteSupportTool.Models.LogService|Exception occurred:. ErrorMessage:OpenClipboard に失敗しました (HRESULT からの例外:0x800401D0 (CLIPBRD_E_CANT_OPEN)), StackTrace: 2021-08-04 07:18:57.1752|ERROR|PersonalNewsSiteSupportTool.Models.LogService|UnhandledException occurred:GetData. ErrorMessage:OpenClipboard に失敗しました (HRESULT からの例外:0x800401D0 (CLIPBRD_E_CANT_OPEN)), StackTrace: 場所 System.Runtime.InteropServices.ComTypes.IDataObject.GetData(FORMATETC& format, STGMEDIUM& medium) 場所 System.Windows.DataObject.OleConverter.GetDataInner(FORMATETC& formatetc, STGMEDIUM& medium) 場所 System.Windows.DataObject.OleConverter.GetDataFromOleHGLOBAL(String format, DVASPECT aspect, Int32 index) 場所 System.Windows.DataObject.OleConverter.GetDataFromBoundOleDataObject(String format, DVASPECT aspect, Int32 index) 場所 System.Windows.DataObject.OleConverter.GetData(String format, Boolean autoConvert, DVASPECT aspect, Int32 index) 場所 System.Windows.DataObject.OleConverter.GetData(String format, Boolean autoConvert) 場所 System.Windows.DataObject.GetData(String format, Boolean autoConvert) 場所 System.Windows.Clipboard.GetDataInternal(String format) 場所 System.Windows.Clipboard.GetText(TextDataFormat format) 場所 PersonalNewsSiteSupportTool.ViewModels.MainWindowModel.ClipboardWatcher_DrawClipboard(Object sender, EventArgs e) 場所 D:\Develop\VisualStudio\PersonalNewsSiteSupportTool\PersonalNewsSiteSupportTool\ViewModels\MainWindowModel.cs:行 160 場所 PersonalNewsSiteSupportTool.ViewModels.ClipboardWatcher.RaiseUpdateClipboard() 場所 D:\Develop\VisualStudio\PersonalNewsSiteSupportTool\PersonalNewsSiteSupportTool\ViewModels\ClipBoardWatcher.cs:行 21 場所 PersonalNewsSiteSupportTool.ViewModels.ClipboardWatcher.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) 場所 D:\Develop\VisualStudio\PersonalNewsSiteSupportTool\PersonalNewsSiteSupportTool\ViewModels\ClipBoardWatcher.cs:行 36 場所 System.Windows.Interop.HwndSource.PublicHooksFilterMessage(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) 2021-08-04 07:18:57.1752|ERROR|PersonalNewsSiteSupportTool.Models.LogService|Exception occurred:GetData. ErrorMessage:OpenClipboard に失敗しました (HRESULT からの例外:0x800401D0 (CLIPBRD_E_CANT_OPEN)), StackTrace: 場所 System.Runtime.InteropServices.ComTypes.IDataObject.GetData(FORMATETC& format, STGMEDIUM& medium) 場所 System.Windows.DataObject.OleConverter.GetDataInner(FORMATETC& formatetc, STGMEDIUM& medium) 場所 System.Windows.DataObject.OleConverter.GetDataFromOleHGLOBAL(String format, DVASPECT aspect, Int32 index) 場所 System.Windows.DataObject.OleConverter.GetDataFromBoundOleDataObject(String format, DVASPECT aspect, Int32 index) 場所 System.Windows.DataObject.OleConverter.GetData(String format, Boolean autoConvert, DVASPECT aspect, Int32 index) 場所 System.Windows.DataObject.OleConverter.GetData(String format, Boolean autoConvert) 場所 System.Windows.DataObject.GetData(String format, Boolean autoConvert) 場所 System.Windows.Clipboard.GetDataInternal(String format) 場所 System.Windows.Clipboard.GetText(TextDataFormat format) 場所 PersonalNewsSiteSupportTool.ViewModels.MainWindowModel.ClipboardWatcher_DrawClipboard(Object sender, EventArgs e) 場所 D:\Develop\VisualStudio\PersonalNewsSiteSupportTool\PersonalNewsSiteSupportTool\ViewModels\MainWindowModel.cs:行 160 場所 PersonalNewsSiteSupportTool.ViewModels.ClipboardWatcher.RaiseUpdateClipboard() 場所 D:\Develop\VisualStudio\PersonalNewsSiteSupportTool\PersonalNewsSiteSupportTool\ViewModels\ClipBoardWatcher.cs:行 21 場所 PersonalNewsSiteSupportTool.ViewModels.ClipboardWatcher.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) 場所 D:\Develop\VisualStudio\PersonalNewsSiteSupportTool\PersonalNewsSiteSupportTool\ViewModels\ClipBoardWatcher.cs:行 36 場所 System.Windows.Interop.HwndSource.PublicHooksFilterMessage(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) 2021-08-04 07:18:57.1821|ERROR|PersonalNewsSiteSupportTool.Models.LogService|Unhandled Exception occurred:GetData. ErrorMessage:OpenClipboard に失敗しました (HRESULT からの例外:0x800401D0 (CLIPBRD_E_CANT_OPEN)), StackTrace: 場所 System.Runtime.InteropServices.ComTypes.IDataObject.GetData(FORMATETC& format, STGMEDIUM& medium) 場所 System.Windows.DataObject.OleConverter.GetDataInner(FORMATETC& formatetc, STGMEDIUM& medium) 場所 System.Windows.DataObject.OleConverter.GetDataFromOleHGLOBAL(String format, DVASPECT aspect, Int32 index) 場所 System.Windows.DataObject.OleConverter.GetDataFromBoundOleDataObject(String format, DVASPECT aspect, Int32 index) 場所 System.Windows.DataObject.OleConverter.GetData(String format, Boolean autoConvert, DVASPECT aspect, Int32 index) 場所 System.Windows.DataObject.OleConverter.GetData(String format, Boolean autoConvert) 場所 System.Windows.DataObject.GetData(String format, Boolean autoConvert) 場所 System.Windows.Clipboard.GetDataInternal(String format) 場所 System.Windows.Clipboard.GetText(TextDataFormat format) 場所 PersonalNewsSiteSupportTool.ViewModels.MainWindowModel.ClipboardWatcher_DrawClipboard(Object sender, EventArgs e) 場所 D:\Develop\VisualStudio\PersonalNewsSiteSupportTool\PersonalNewsSiteSupportTool\ViewModels\MainWindowModel.cs:行 160 場所 PersonalNewsSiteSupportTool.ViewModels.ClipboardWatcher.RaiseUpdateClipboard() 場所 D:\Develop\VisualStudio\PersonalNewsSiteSupportTool\PersonalNewsSiteSupportTool\ViewModels\ClipBoardWatcher.cs:行 21 場所 PersonalNewsSiteSupportTool.ViewModels.ClipboardWatcher.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) 場所 D:\Develop\VisualStudio\PersonalNewsSiteSupportTool\PersonalNewsSiteSupportTool\ViewModels\ClipBoardWatcher.cs:行 36 場所 System.Windows.Interop.HwndSource.PublicHooksFilterMessage(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) 場所 PersonalNewsSiteSupportTool.App.Main()

kurodenimu commented 3 years ago

クリップボードを短時間に操作したか特殊なデータが入っていたかだと思う。 クリップボード操作にハンドリングを追加したらなんとかなるのでは。

kurodenimu commented 3 years ago

ググったところによると他のアプリで掴んでいるときに発生するとのこと。 リソース開放を待てばよいのだが掴まれているかチェックする方法はなさそうなのでリトライ処理を入れる。 なお、例外の型が出力されていないので追加する。