簡體   English   中英

在Compact Framework的子窗體的showdialog中調用父窗體的方法,導致ThreadAbortException

[英]Calling a Method of parent form in showdialog of child form in Compact Framework Causing ThreadAbortException

我正在從父表單中調用表單的ShowDialog,並且正在子表單中填充一些數據,我想通過這些數據在父表單中調用方法。

父表單中的方法更新了表單中的控件值。

這導致我線程異常中止

ChildForm Cform=new ChildForm();
Cform.ShowDialog();

並在ChildForm中

ParentForm PForm=new Parentform();
PForm.Somemethod();//method in my parentForm

在某種方法中,我通過調用來更新表單中控件的值

我正在調用每個控件,但仍然收到ThreadAbort異常

注意:我使用的是Compact Framework

//My parent Form Method
       public void ProcessResponse()
        {

            Result Objresult = new Result();

            Objresult.ShowDialog();

        }

    //My child Form
      public void SendBackResponse()
      {
      //Some Processing
       ParentForm PForm=new Parentform();
        PForm.Somemethod();
      }

And In ParentForm I am having 

    public void Somemethod()
    {
        if(InvokeRequired)
        {
         //I am invoking Through the delegate
        }
    }

提前致謝

這里有一些問題。

首先,您的“父”表單不是名為ShowDialog的表單。 您實際上是在子級中創建一個全新的Form實例,因此它與創建子級的父級不同。

其次,ShowDialog為正在顯示的對話框創建一個單獨的消息泵。 在對話框關閉並且主消息泵再次開始運行之前,發送給父級的所有Windows消息都不會得到處理。 這意味着在對話框關閉之前,不會在父級上進行任何UI更新。

第三,您所做的只是糟糕的設計。 如果您需要父級以某種UI方式對子級做出反應,然后在子級中公開一個屬性,在子級關閉時閱讀該屬性並處理更新:

class Child : Form
{
    ....
    public string NewInfo { get; set; }
}

....

// code in the Parent
var child = new ChildForm();
if(child.ShowDialog() == DialogResult.OK)
{
   this.UseChildData(child.NewInfo);
}

如果您不是更新父UI,而是運行某種形式的業務邏輯,那么您將違反關注點分離。 將該業務邏輯放入Presenter / Controller / ViewModel / Service / Model /任何對象中,然后傳遞給子級。

class Service
{
    public void DoSomething() 
    {
        // business logic here 
    } 
}

class Child : Form
{
    Service m_service;

    public Child(Service service)
    {
        m_service = service;
    }

    void Foo()
    {
        // call the business logic
        m_service.DoSomething();
    }
}

....

// code in the Parent
var svc = new Service();
....
var child = new ChildForm(svc);
child.ShowDialog();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM