Vra

Dit mag lyk soos 'n ietwat geforseerde voorbeeld, maar ek links krap my kop.

Ok, ek het 'n konsole artikels wat 'n WindowsForm instantiates en doen 'n beroep 'n metode genoem DoSomeWork () op die vorm.

class Program
  { 
    static void Main(string[] args)
    {
      Form1 form = new Form1();         
      form.DoSomeWork();   
    }
  }

Form1 lyk soos volg ...

public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
    }

    public void DoSomeWork()
    {
      OuterClass outerClass = new OuterClass();
      outerClass.DoSomeWork();
    }    
  }

Buite klas, op sy beurt, lyk soos volg ...

public class OuterClass
  {
    public void DoSomeWork()
    {
      InnerClass innerClass = new InnerClass();
      innerClass.DoSomeWork();
    }
  }

En laastens InnerClass lyk soos volg ...

public class InnerClass
  {
    private BackgroundWorker _backgroundWorker = new BackgroundWorker();

    public InnerClass()
    {
      _backgroundWorker.WorkerReportsProgress = true;
      _backgroundWorker.DoWork += new DoWorkEventHandler(BackgroundWorker_DoWork);
      _backgroundWorker.ProgressChanged += new ProgressChangedEventHandler(BackgroundWorker_ProgressChanged);
    }

    void BackgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
      int i = 0; //I've placed a break point here. But it's never hit
    }

    void BackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
    {
      BackgroundWorker worker = sender as BackgroundWorker;

      worker.ReportProgress(42);
    }

    public void DoSomeWork()
    {
      _backgroundWorker.RunWorkerAsync();
    }
  }

Vir 'n rede onbekend (vir my), die BacgroundWorker in InnerClass lyk nooit aan die brand die ProgressChanged gebeurtenis. As ek vervang

Form1 form = new Form1();

met

OuterClass outerClass = new OuterClass()

in die klas Program, dit werk goed. So hoekom is dit my gebeure nie afgegaan toe ek dieselfde metodes roeping deur 'n vorm?

Dankie!

EDIT:. Ek lyk mense te gooi af deur die verlaat van die ProgressChanged event handler as die gooi van 'n NotImplementedException, so ek het dit verwyder word vir duidelikheid

Was dit nuttig?

Oplossing

Jy het vergeet om 'n boodskap lus begin, roep Application.Run () word vereis. Sonder 'n boodskap lus, kan die Background gebeure wat nie werk nie. Om vas te stel:

static void Main(string[] args)
{
  Application.Run(new Form1());   
}

Bel DoSomeWork () in constructor die vorm of is dit op load-gebeurtenis.

Ander wenke

Het jy eintlik throw NotImplementedException(); in die hanteerder? of jy net gespot hierdie up vinnig en vergeet om dit te verwyder?

My raaiskoot sou wees dat dit is wat verband hou met verskillende draad woonstel modelle benut.

Uit my ervaring as 'n enkel-draad-woonstel nie-UI draad gooi 'n uitsondering buite die hoof UI draad, wat draad sal net sterf sonder enige waarskuwing.

Windows Vorms vereis 'n ander woonstel model as Console aansoeke as ek reg onthou. Dit kan die oorsaak van die probleem te wees.

Ek kan verkeerd wees, maar dit moet 'n paar wenke gee.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top