基础.show() 抛出 InvalidOperationException
本文关键字:抛出 InvalidOperationException show 基础 | 更新日期: 2023-09-27 17:55:39
我在base上遇到了问题。Show() 抛出一个 InvalidOperationException。 这有几个问题:
- 仅当我在"调试 ->异常"菜单中显示"公共语言运行时异常"时,错误才会显示在 vs2012 中,但如果我在没有它的情况下运行它,则不会显示错误。
- 在 vs2012 之外运行程序时,将显示一个消息框,显示错误,堆栈跟踪显示在本文底部。
- 我试图研究在基地抛出的无效操作异常。Show() 在线,但未能成功找到与 base 相关的任何内容。具体来说就是显示()。
该程序正在做的是打开一个表单,当单击链接时,它会使用以下代码打开一个 DocViewer 窗口:
private void paperVisionLink_Click(object sender, RoutedEventArgs e)
{
try
{
AnalRunSeq sequence = (bob.Resources["AnalRunSeqsCollection"] as CollectionViewSource).View.CurrentItem as AnalRunSeq;
if (sequence != null)
{
try
{
var pveView = this.ShowCOCDocumentForWorkorder((sequence.Sample.WorkOrderID));
}
catch (Exception ex)
{
ELI_Data.DataLogger.Logger.Error("Error starting papervision window", ex);
}
}
}
catch
{
MessageBox.Show("Cannot find COC document for that Work Order.");
}
}
public Window ShowCOCDocumentForWorkorder(string workorder)
{
PaperVision pve = new PaperVision("bluser", "bluser");
pve.SubmitSearchCriteria("WORK ORDER'tCATEGORY", workorder.ToUpper() + "'tCOC");
XDocument response = pve.ExecuteQuery();
XElement documentXml = response.Descendants("DOC").FirstOrDefault();
PVEWindow pveView = null;
if (!documentXml.IsNull())
{
pveView = new PVEWindow();
pveView.Show(
string.Format("{0}/HttpInterface.asp", EnergyDatabase.Setup.DocImaging.WebService),
EnergyDatabase.Setup.DocImaging.EntityID.Value,
pve.SessionID,
EnergyDatabase.Setup.DocImaging.DocProjects.Single(dp => dp.Project == "LOGIN").ProjectID.Value,
documentXml.Attribute("DOCID").Value);
}
return pveView;
}
pveView.Show 方法是基础所在。Show() 方法正在抛出可执行文件:
public void Show(string url, int entityId, string sessionId, int projId, string docId)
{
try
{
base.Show(); //exception thrown here
this.PvdmDocView.InitComm(url, entityId, sessionId, projId, docId);
}
catch (Exception ex)
{
Logger.Error("Error opening papervision viewer", ex);
throw;
}
}
下面是程序在 Visual Studio 外部运行时引发的异常:
************** Exception Text **************
System.InvalidOperationException: Dispatcher processing has been suspended, but messages are still being processed.
at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Boolean isSingleParameter)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
at System.Windows.Threading.Dispatcher.WrappedInvoke(Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
at System.Windows.Threading.Dispatcher.InvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Boolean isSingleParameter)
at System.Windows.Threading.Dispatcher.Invoke(DispatcherPriority priority, Delegate method, Object arg)
at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
at System.Windows.Forms.UnsafeNativeMethods.CoCreateInstance(Guid& clsid, Object punkOuter, Int32 context, Guid& iid)
at System.Windows.Forms.AxHost.CreateWithoutLicense(Guid clsid)
at System.Windows.Forms.AxHost.CreateWithLicense(String license, Guid clsid)
at System.Windows.Forms.AxHost.CreateInstanceCore(Guid clsid)
at System.Windows.Forms.AxHost.CreateInstance()
at System.Windows.Forms.AxHost.GetOcxCreate()
at System.Windows.Forms.AxHost.TransitionUpTo(Int32 state)
at System.Windows.Forms.AxHost.CreateHandle()
at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
at System.Windows.Forms.Control.CreateControl()
at System.Windows.Forms.Control.WmShowWindow(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
at System.Windows.Forms.ContainerControl.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
最奇怪的是,尽管抛出了此异常,但如果在显示消息框后尝试继续,则一切正常,因此我不确定如何解决此问题。 任何帮助将不胜感激!
编辑
我已经更新了上面的帖子以删除线程并将 ShowCOCDocumentForWorkorder 方法添加到主窗口类中。 这应该可以解决之前发生的线程问题。 现在发生的唯一应该更容易解决的问题是修复基础。Show() 方法引发 InvalidOperationException 错误。 中使用的类不允许使用 Invoke 方法,尽管我不确定为什么。以下是 PVEWindow 类的完整类代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
namespace Microbiology
{
using System.Windows.Forms;
/// <summary>
/// Interaction logic for PVEWindow.xaml
/// </summary>
public partial class PVEWindow : Window
{
public PVEWindow()
{
this.InitializeComponent();
base.Show();
}
public void Show(string url, int entityId, string sessionId, int projId, string docId)
{
//base.Show();
try
{
this.PvdmDocView.InitComm(url, entityId, sessionId, projId, docId);
}
catch (Exception ex)
{
ELI_Data.DataLogger.Logger.Error("Error opening papervision viewer", ex);
throw;
}
}
}
}
我能够通过在 base 之前将以下代码添加到 Show 方法来解决此问题。显示() 调用:
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.ThrowException);