Tag: exception处理

Webforms数据绑定与EF Code-First Linq查询错误

在此示例中,Scott显示对dbContext执行Linq查询并将结果直接绑定到GridView以显示产品列表。 他的例子是使用Code First的CTP4版本。 但是,当我尝试使用最新版本的EntityFramework 4.1做同样的事情时,我收到以下错误: 不支持直接绑定到商店查询(DbSet,DbQuery,DbSqlQuery)的数据。 而是使用数据填充DbSet,例如通过在DbSet上调用Load,然后绑定到本地数据。 我看到DBQuery对象在IListSource.GetList()的实现中故意抛出此错误,IListSource.GetList()用于数据绑定。 为什么他的例子有效? 顺便说一句,我知道我可以通过放入一个projects.ToList()来完成这项工作。 我的主要问题是发布版本中的某些内容是否发生了变化,使得此类内容不再起作用,或者我是否遗漏某些可以解决此错误的内容。 仅供参考,我指的是这样的代码: MyDbContext db = new MyDbContext(); var projects = from p in db.Projects where p.AnotherField == 2 select p; grdTest.DataSource = projects; grdTest.DataBind();

在WPF中捕获子线程中的未处理exception

我有一个WPF应用程序,可以旋转多个线程。 我在App.xaml.cs中定义了一个DispatcherUnhandledException事件处理程序,它显示详细的错误消息,每次UI线程遇到exception时都会调用此处理程序。 问题在于子线程:它们未处理的exception永远不会得到处理。 我该怎么做呢? 示例代码: private void Application_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) { MessageBox.Show(“detailed error message”); } private void Application_Startup(object sender, StartupEventArgs e) { //… //If an Exception is thrown here, it is handled //… Thread[] threads = new Thread[numThreads]; for(int i = 0; i < numThreads; i++) { threads[i] = new Thread(doWork); threads[i].Start(); } } […]

侦听COM端口时跨线程操作无效

可能重复: 使跨线程操作无效 跨线程操作无效 我正在尝试侦听COM端口,以便为SerialPort.DataReceived事件创建新的处理程序。 逻辑很简单 – 我写了一些东西给TextBox1,按下Button1,我的文本应该在Label1中显示它自己。 但我的应用程序不想运行,因为它抛出“交叉线程操作无效”错误。 我做了一些搜索并找到了Invoke对象 – 我如何在我的例子中使用它? 为什么我需要包含Invoke逻辑? namespace WindowsApplication1 { public partial class Form1 : Form { SerialPort sp = new SerialPort(); public Form1() { InitializeComponent(); sp.DataReceived += MyDataReceivedHandler; } private void Form1_Load(object sender, EventArgs e) { } private void MyDataReceivedHandler(object sender, SerialDataReceivedEventArgs e) { try { //sp.PortName = “COM3”; […]

将exception冒泡到堆栈顶部是否可以?

是否可以让exception冒泡到堆栈顶部而不是在每个方法中捕获它?我们应该在任何情况下都这样做吗? .. 这种方法是否存在任何微妙的问题或副作用(例如,丢失exception细节,堆栈跟踪或内部exception细节等)? 虽然我的问题很笼统,但我目前的情况如下: 我正在将现有的WSE3 Web服务移动到WCF,因此y客户端是WSE3客户端。 我添加了一个行为,以便在WCF服务中发生FaultException它将被传递给客户端。 当OperationContract方法中存在exception时,我在客户端获得异​​常消息没有任何问题。 但是只要它出现在OperationContract以外的方法中,我就会以某种方式得到与安全相关的问题。 我无法确定确切的原因。 但是,作为一种解决方法,我想只从OperationContract抛出exception,并让exception冒泡到OperationContract 。

.NET的一般exception处理策略

我习惯在每种方法中使用try / catch块。 这样做的原因是我可以在违规点捕获每个exception并记录它。 从我的阅读和与他人的对话中我理解,这不是一种流行的观点。 人们应该只抓住人们准备处理的事情。 但是,如果我没有抓到违规点,那么就有可能永远不会记录那次违规行为并了解它。 注意:当我抓住并且不处理时,我仍然会抛出。 这允许我让exception传播到将处理它的东西,但仍然让我在违规点记录它。 那么……如何在每个方法中避免try / catch,但仍然在错误发生时记录错误?

为什么内部exception到达ThreadException处理程序而不是实际抛出的exception?

在抛出exception并在Application.ThreadException事件处理程序中捕获它们时,我看到了一些奇怪的行为。 基本上,下面的示例中发生的是在BackgroundWorker的DoWork事件处理程序中抛出exception。 RunWorkerCompleted事件处理程序重新抛出一个新exception,原始exception作为内部exception。 为什么内部exception出现在ThreadException事件处理程序中而不是抛出的实际exception? 如果我在RunWorkerCompleted事件处理程序中没有提供内部exception,则会显示正确的exception。 using System; using System.Windows.Forms; using System.ComponentModel; namespace WierdExceptionApp { class WierdExceptionForm : Form { BackgroundWorker worker = new BackgroundWorker(); public WierdExceptionForm() { worker.DoWork += new DoWorkEventHandler(worker_DoWork); worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted); worker.RunWorkerAsync(); } void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { if (e.Error != null) { throw new Exception(“worker_RunWorkerCompleted”, e.Error); } } void […]

套接字连接已中止 – CommunicationException

本来: 我认为这是一个循环参考问题……..事实certificate它不是。 问题产生于根本没有配置服务配置。 由于默认值非常低,因此发送大量数据会导致服务崩溃。 场景: 看来我的WCF服务中可能有循环引用,但使用“[DataContract(IsReference = true)]”,没有任何帮助解决它。 我收到错误“套接字连接已中止。这可能是由于处理消息时出错或远程主机超出接收超时或基础网络资源问题引起的。本地套接字超时为’00:01:00′ “。 我错过了什么吗? 码: [DataContract(IsReference=true)] public class Message { [DataMember] public string TopicName { get; set; } [DataMember] public string EventData { get; set; } [DataMember] public SerializableDictionary FuturesLineDictionary { get; set ; } } 思考: 我想知道是不是因为我有一个FuturesAsset类,它有一个BindableDictionary类型的属性(这是一个CUSTOM OBJECT),该属性包含一个FuturesLinesAssets列表。 见下文: 家长: public class FuturesAsset { public string AssetName […]

无法将类型’System.Linq.IQueryable’隐式转换为’System.Collections.Generic.IList’

我有一个方法: public DzieckoAndOpiekunCollection GetChildAndOpiekunByFirstnameLastname(string firstname, string lastname) { DataTransfer.ChargeInSchoolEntities db = new DataTransfer.ChargeInSchoolEntities(); DzieckoAndOpiekunCollection result = new DzieckoAndOpiekunCollection(); if (firstname == null && lastname != null) { IList resultV = from p in db.Dziecko where lastname == p.Nazwisko **select** new DzieckoAndOpiekun( p.Imie, p.Nazwisko, p.Opiekun.Imie, p.Opiekun.Nazwisko) ; result.AddRange(resultV); } return result; } 和选定位置的错误: 错误1无法将类型’System.Linq.IQueryable ‘隐式转换为’System.Collections.Generic.IList ‘。 […]

如何改进此exception重试方案?

我有一个我正在调用的Web服务方法,它是第三方和我的域之外。 出于某种原因,Web服务偶尔会出现网关超时。 它的间歇性和在尝试失败后直接调用它可以成功。 现在我有一个编码困境,我有代码应该做的伎俩,但代码看起来像业余时间,你会在下面看到。 这是非常糟糕的代码,还是可以接受的? 如果不能接受,我该如何改进呢? 在看的同时请努力保持笔直。 try { MDO = OperationsWebService.MessageDownload(MI); } catch { try { MDO = OperationsWebService.MessageDownload(MI); } catch { try { MDO = OperationsWebService.MessageDownload(MI); } catch { try { MDO = OperationsWebService.MessageDownload(MI); } catch { try { MDO = OperationsWebService.MessageDownload(MI); } catch (Exception ex) { // 5 retries, ok now log […]

从另一个线程中捕获exception

我有一个在单独的线程中运行的方法。 该线程是从Windows应用程序中的表单创建和启动的。 如果从线程内部抛出exception,将其传递回主应用程序的最佳方法是什么。 现在,我将对主窗体的引用传递给线程,然后从线程调用该方法,并使该方法被主应用程序线程调用。 是否有最好的练习方法,因为我现在对自己的表现不满意。 我的表格示例: public class frmMyForm : System.Windows.Forms.Form { /// /// Create a thread /// /// /// private void btnTest_Click(object sender, EventArgs e) { try { //Create and start the thread ThreadExample pThreadExample = new ThreadExample(this); pThreadExample.Start(); } catch (Exception ex) { MessageBox.Show(ex.Message, Application.ProductName); } } /// /// Called from inside the […]