Showing results 1 to 2 of 2

Thread: Bedienoberfläche blockiert Funktionsausführung

  1. #1
    Join Date
    20.06.2013
    Posts
    96

    Default Bedienoberfläche blockiert Funktionsausführung

    Moin,

    ich habe folgendes Problem mit Bedienoberflächen in der Zenon 7.50.

    Wir haben ein System, dass über eine Zeitfunktion alle 5 Minuten ein VSTA-Makro ausführt. Wenn nun aber eine VSTA-Bedienoberfläche geöffnet ist, wird scheinbar der restliche "Code" gesperrt. Wenn die Bedienoberfläche geschlossen wird, werden die zuvor ausgeführten und scheinbar gesammelten Funktionen nacheinander ausgeführt.

    Die Benutzeroberfläche wird wie folgt ausgeführt:

    Gui.ShowDialog()


    Ist das Problem bekannt und gibt es hier ggf. Lösungsvorschläge?

    mit freundlichen Grüßen

  2. #2
    Join Date
    13.08.2013
    Posts
    57

    Default Re: Bedienoberfläche blockiert Funktionsausführung

    Hier ist das Problem das dabei der MainThread blockiert wird.Hab dazu mal ein kleines Sample gemacht, dass mit Block() den MainThread für 10 sec. blockiert.
    Alternativ könntest du die Gui auch mit Show() statt mit ShowDialog() aufschalten. ShowDialog() ist blockierend.
    Im aktuellen VSTA kann man hier mit den BackgroundWorker arbeiten(siehe Sample,System.Windows.Forms miteinbeziehen). Ab 7.60 gibt's die neue API mit .net 4.5++ und man könnte dan mit Tasks arbeiten

       private void ThisProject_Startup(object sender, EventArgs e)
            {
                this.Active += new zenOn.ActiveEventHandler(ThisProject_Active);
                this.Inactive += new zenOn.InactiveEventHandler(ThisProject_Inactive);
                worker.DoWork += new DoWorkEventHandler(worker_DoWork);
    
            }
            BackgroundWorker worker = new BackgroundWorker();
            public void Macro_Blocked() 
            {
                Block();
            }
            public void Macro_NotBlocked()
            {
                worker.RunWorkerAsync();
            }
    
            void worker_DoWork(object sender, DoWorkEventArgs e)
            {
                Block();
            }
            private void Block() 
            {
                Thread.Sleep(10000);
            }
    Mfg Sigi

Similar Threads

  1. Replies: 0
    Last Post: 13th November 2014, 12:08

Posting Rules

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •