Кнопка «Картинка». Добавляем статическую переменную

 

        static System.Windows.Controls.Image imgStatic;

 

Инициализируем ее в конструкторе

 

            imgStatic = img1;

 

Добавляем обработчик

        //load image

        private void Button7_Click(object sender, RoutedEventArgs e)

        {

            Label1.Visibility = Visibility.Hidden;

            Label2.Visibility = Visibility.Hidden;

            sv1.Visibility = Visibility.Hidden;

            textBlock2.Visibility = Visibility.Hidden;

            web1.Visibility = Visibility.Hidden;

            img1.Visibility = Visibility.Visible;

            button2.Content = "Команды";

 

            string path;

            OpenFileDialog openFileDialog = new OpenFileDialog();

            if (openFileDialog.ShowDialog() == true)

            {

                path = openFileDialog.FileName;

                var bitmap = new System.Windows.Media.Imaging.BitmapImage(new Uri(path, UriKind.Absolute));

                img1.Source = bitmap;

            }

        }

 

И ссылку на него в конструкторе

 

            button7.Click += Button7_Click;

 

Запускаем приложение, нажимаем «Картинка»., выбираем картинку, получаем результат (рис.2.5).

 

Рис.2.5. Результат работы кнопки «Картинка».

 

 

        Для использования из скриптов создадим метод

//Загрузить файл с изображением в компонент

        public static void SetBitmapImage(string path)

        {

            if (!bReady || dispObj.HasShutdownStarted) return;

            //мы запускаем код в UI потоке

            dispObj.Invoke(delegate

            {

                imgStatic.Source = new System.Windows.Media.Imaging.BitmapImage(new Uri(path, UriKind.Absolute));

            });

        }

 

Пример слайд-шоу

 

//test47_slides

using MathPanel;

using MathPanelExt;

using System.Net.Sockets;

using System;

using System.Collections.Generic;

 

///assemblies to use

///[DLL]System.dll,System.Xaml.dll,WindowsBase.dll,PresentationFramework.dll,PresentationCore.dll,System.Drawing.dll,System.Net.dll,System.Net.Http.dll,System.Core.dll[/DLL]

///

namespace DynamoCode

{

    public class Script

    {

        public void Execute()

        {

            Dynamo.Console("test47_slides");

            string sDir = @"c:\temp\";

            string[] fnames = { "pat1_rot.png", "pat2_rot.png", "pat3_rot.png", "pat4_rot.png", "pat5_rot.png",

                "pat6_rot.png", "pat7_rot.png", "pat8_rot.png", "pat9_rot.png", "pat10_rot.png",

                "pat11_rot.png", "pat12_rot.png"

            };

            for (int i = 0; i < fnames.Length; i++)

            {

                var fn = fnames[i];

                Dynamo.SetBitmapImage(sDir + fn);

                System.Threading.Thread.Sleep(500);

            }

        }

    }

}

Показываем по очереди изображения из файлов, «засыпаем» на 500 милисекунд.

 

 

Для надежности работы добавим в конструктор

 

            this.Closing += OnBeforeClosing;

 

 

и обработчик

void OnBeforeClosing(object sender, EventArgs e)

        {

            bReady = false;

            foreach (var thr in lstThr)

            {

                if (thr.IsAlive) thr.Abort();

            }

        }

 

Т.е. мы заканчиваем все продолжающие работу потоки, созданные при выполнении скриптов.