如何解决我的关闭/处置未处理的异常?

时间:2017-01-18 18:18:35

标签: c# .net winforms

我正在开发一个Windows Forms App,一个呼叫中心和CRM之间的连接器,我遇到了一个我无法理解或解决的未处理异常。

我的应用程序:

  • 带有一些控件和FlowControll Pannel的MainForm可能会也可能不会显示SearchForms集合 - 确定
  • SearchForm - 基本上是一个带有可点击单元格的DataGridView - 根据列索引,点击将执行不同的操作 - 确定
  • DialForm - 在我的SearchForm上单击一个单元格后加载并允许i)取消(关闭表单OK); ii)拨打号码-PROBLEM - 非常令人沮丧

当我点击拨号时,应用程序正确地使phoneCall通过我的呼叫中心,但是下一行代码(DialForm上的Dispose())会生成“Safe Handle已关闭”类型的未处理异常,据报道DangerousAddRef(布尔和成功)。

相关方法:

///
/// DialForm Method - upon clicking «Dial Number» Button
///
private void dialButton_Click(object sender, EventArgs e)
{
    //
    // Piece of code to manage closing with DialFormCloseEventArgs
    //
    DialFormCloseEventArgs args = new DialFormCloseEventArgs();
    args.toClose = this;
    EventHandler<DialFormCloseEventArgs> eh = father.Search_CloseDialForm;
    this.BeginInvoke(eh, new object[] { sender, args });
}

///
/// SearchForm Method - EventHandler to close DialForm and make call
///
public void Search_CloseDialForm(object sender, DialFormCloseEventArgs e)
{
    string numberToDial = e.toClose.numberToDial.Text;
    e.toClose.Dispose();
    this.rePositionMainForm();
    using (ConectorCTI.ConectorCTI ctiws = new ConectorCTI.ConectorCTI())
    {
        ctiws.Timeout = 180000;

        // Synchronous Call
        //ctiws.Dial(this.userLoginName, numberToDial, "");

        // Assynchronous Call
        ctiws.DialAsync(this.userLoginName, numberToDial, "");
    }
}

I also show my App with textual descriptions so you can actually «see it» enter image description here

1 个答案:

答案 0 :(得分:1)

在处置对象之前,可能需要等待异步任务完成。像

这样的东西
using (ConectorCTI.ConectorCTI ctiws = new ConectorCTI.ConectorCTI())
{
    var task = ctiws.DialAsync(this.userLoginName, numberToDial, "");
    await task;
}