Ответы пользователя по тегу C#
  • Есть какой-нибудь профайлер для .NET CORE под OS X?

    tomnolane
    @tomnolane
    профессиональный разработчик
    ставить винду в виртуалку)))
    Ответ написан
  • При попытке компиляции появляется ошибка - Входная строка имела неверный формат,в чем проблема?

    tomnolane
    @tomnolane
    профессиональный разработчик
    тут (проблема) с пробелами:
    Console.WriteLine("SC.color ={ 0},SC.ves ={ 1},SC.power ={ 2},SC.transmission ={ 3},SC.complete_drive{ 4}", SC.color, SC.ves, SC.power, SC.transmission, SC.complete_drive);

    уберите пробелы:
    Console.WriteLine("SC.color ={0},SC.ves ={1},SC.power ={2},SC.transmission ={3},SC.complete_drive={4}", SC.color, SC.ves, SC.power, SC.transmission, SC.complete_drive);

    (где { 0}, { 1} ... нужно {0}, {1})
    Ответ написан
    1 комментарий
  • Как привязать объекта класса Bitmap к компоненту в WPF?

    tomnolane
    @tomnolane
    профессиональный разработчик
    1)
    // image создаю программно, но можно и из x:Name использовать аналогично (без var image = new System.Windows.Controls.Image();)
                            var image = new System.Windows.Controls.Image();
                            BitmapImage bitmap = new BitmapImage();
                            bitmap.BeginInit();
                            bitmap.UriSource = new Uri(path, UriKind.Absolute);
                            bitmap.EndInit();
                            Image.Source = bitmap;


    2)
    [SerializableAttribute]
    [ComVisibleAttribute(true)]
    public sealed class Bitmap : Image


    3) тык
    4)
    <Image Width="90" Height="90" 
           Source="{Binding Path=ImageSource}"
           Margin="0,0,0,5" />

    public object ImageSource {
        get {
            BitmapImage image = new BitmapImage();
    
            try {
                image.BeginInit();
                image.CacheOption = BitmapCacheOption.OnLoad;
                image.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
                image.UriSource = new Uri( FullPath, UriKind.Absolute );
                image.EndInit();
            }
            catch{
                return DependencyProperty.UnsetValue;
            }
    
            return image;
        }
    }

    5)
    <Image>
        <Image.Source>
            <BitmapImage UriSource="{Binding Path=ImagePath, Converter=...}" />
        </Image.Source>
    </Image>

    BitmapImage image = new BitmapImage();
    image.BeginInit();
    image.UriSource = new Uri(value as string);
    image.EndInit();
    
    return image;

    6)
    img.Source = (ImageSource)new ImageSourceConverter().ConvertFromString("/www/image.png");
    Ответ написан
    2 комментария
  • Что не так с этим кодом?

    tomnolane
    @tomnolane
    профессиональный разработчик
    так сойдет?
    using System;
    
    namespace auto
    {
        class Program
        {
            public class Auto
            {
                private int _speed = 0;
                private int _time = 0;
                private string name_car = string.Empty;
    
                public int Speed { get { return _speed; } set { _speed = value; } }
                public int Time { get { return _time; } set { _time = value; } }
                public string Name_car { get { return name_car; } set { name_car = value; } }
    
                public void Drive()
                {
                    Console.WriteLine(Speed * Time + " class Auto" + " name car: " + Name_car);
                }
            }
    
    
            public class fastCar : Auto
            { 
                public void fastDrive(int time, string name)
                {
                    Console.WriteLine(Speed * time * 2 + " class fastCar" + " name car: " + name);
    
                }
    
            }
    
            public class slowCar : Auto
            { 
                public void slowDrive(int time, string name)
                {
                    Console.WriteLine(Speed * time / 2 + " class slowCar" + " name car: " + name); 
                }
    
            }
            static void Main(string[] args)
            {
                fastCar x = new fastCar(); 
                x.Speed = 100;
                x.Time = 15;
                x.Name_car = "fastCar-x";
                x.Drive();
                x.fastDrive(x.Time, x.Name_car);
    
    
                slowCar y = new slowCar();
                y.Speed = 100;
                y.Time = 15;
                y.Name_car = "slowCar-y";
                y.Drive();
                y.slowDrive(y.Time, y.Name_car);
                Console.ReadLine();
            }
        }
    }


    п.с. логику лучше переделать под норму "don't repeat your self"

    хотя бы вот так:
    using System;
    
    namespace auto
    {
        class Program
        {
            public class Auto
            {
                private int _speed = 0;
                private int _time = 0;
                private string name_car = string.Empty;
    
                public int Speed { get { return _speed; } set { _speed = value; } }
                public int Time { get { return _time; } set { _time = value; } }
                public string Name_car { get { return name_car; } set { name_car = value; } }
    
                public void Drive()
                {
                    Console.WriteLine(Speed * Time + " class Auto" + " name car: " + Name_car);
                }
            }
    
    
            public class fastCar : Auto
            { 
                public void fastDrive()
                {
                    Console.WriteLine(Speed * Time * 2 + " class fastCar" + " name car: " + Name_car);
    
                }
    
            }
    
            public class slowCar : Auto
            { 
                public void slowDrive()
                {
                    Console.WriteLine(Speed * Time / 2 + " class slowCar" + " name car: " + Name_car); 
                }
    
            }
            static void Main(string[] args)
            {
                fastCar x = new fastCar(); 
                x.Speed = 100;
                x.Time = 15;
                x.Name_car = "fastCar-x";
                x.Drive();
                x.fastDrive();
    
    
                slowCar y = new slowCar();
                y.Speed = 100;
                y.Time = 15;
                y.Name_car = "slowCar-y";
                y.Drive();
                y.slowDrive();
                Console.ReadLine();
            }
        }
    }
    Ответ написан
    Комментировать
  • Как называется такая конструкция в C#?

    tomnolane
    @tomnolane
    профессиональный разработчик
    геттер (свойство).

    Оно позволяет возвращать объект типа Matrix под именем transform, который храниться в приватной "Области видимости". И это стандартная "тема".

    Допустим, есть объект который только хранит в себе что-то private string my_string = "что-то";
    он находится в области видимости "private" - т.е. доступен для использования только в рамках того класса, где он находится. В другом классе к нему (my_string) нельзя получить доступ и изменить. И в идеале так и нужно делать, чтобы созданные объекты были доступны только там, где надо, а не везде...
    далее создаём геттер (который только отдаёт значение объекта my_string, при этом сам в себе ничего не хранит (только ссылку),
    private string my_string = "что-то";
    public string My_String { get { return my_string ; } }

    его (My_String ) делают открытым (public) и позволяют безопасно получать данные из my_string;

    аналогично можно сделать сеттер, но ниже покажу самый распространённый:
    private string my_string = "что-то";
    public string My_String { get { return my_string ; } set { my_string  = value; }}

    в этом случае мы можем записывать (условно безопасно из другого класса к примеру) в my_string какие-то данные через My_String.

    всё это делается очень легко:
    //получить данные из my_string (get)
    var temp = My_String; 
    //записать/установить/изменить данные в my_string (set)
    My_String = "я тебя изменяю";  // в этом случае в  будет не my_string = "что-то", а my_string = "я тебя изменяю"
    Ответ написан
    1 комментарий
  • Как передать нажатую кнопку в другой метод C#?

    tomnolane
    @tomnolane
    профессиональный разработчик
    public void TakeMessage(string btnStatus, string userName, Button btnTest)
            {
    
    
                if (userName == "")
                {
                    MessageBox.Show("Введите Ваше имя!");
                }
    
                else if (btnStatus == "Red")
                {
                    btnTest.BackColor = Color.Green;
                    btnTest.Text = "Свободно";
                }
                else
                {
                    btnTest.BackColor = Color.Red;
                    btnTest.Text = userName;
                }
            }
    
    private void btnClick(object sender, EventArgs e)
            {
                var btn = sender as Button; 
    
                if (btn.BackColor == Color.Green)
                {
                    btnStatus = "Green";
                }
    
                else
                {
                    btnStatus = "Red";
                }
    
                Server.SendMessageToAll(btnStatus, tbLogin.Text);
                TakeMessage(btnStatus, tbLogin.Text, btn);
            }


    в вашем случае не вижу смысла создавать отдельный метод TakeMessage ... все что есть в TakeMessage, можно реализовать в одном методе обработчике: btnClick
    Ответ написан
  • Как парсить HTML при помощи HttpClient?

    tomnolane
    @tomnolane
    профессиональный разработчик
    способов много, но предложу использовать универсальный, пусть это и костыль, но много место не занимает, дополнительные (сторонние библиотеки не нужны...):
    using System;
    using System.IO;
    using System.Net;
    using System.Net.Http;
    using System.Text.RegularExpressions;
    using System.Threading.Tasks;
    
    namespace ConsoleApplication3
    {
        public static class Program
        {
            private static string html = "Ошибка";
    
            private static void Main()
            {
                ShowTags("https://www.yandex.ru/","a");
                Console.ReadKey();
            }
    
            private static async void ShowTags(string my_url, string tag = "a") // Тег по умолчанию для поиска, ищем теги <a></a>
            { 
                // Загружем страницу 
               string data = await GetHtmlPageText(my_url);
    
               if (!data.Contains("Ошибка"))
                { 
                    string pattern = string.Format(@"\<{0}.*?\>(?<tegData>.+?)\<\/{0}\>", tag.Trim());
                    // \<{0}.*?\> - открывающий тег
                    // \<\/{0}\> - закрывающий тег
                    // (?<tegData>.+?) - содержимое тега, записываем в группу tegData
    
                    Regex regex = new Regex(pattern, RegexOptions.ExplicitCapture);
                    MatchCollection matches = regex.Matches(data);
    
                    foreach (Match matche in matches)
                    {
                        Console.WriteLine(matche.Value);
                        Console.WriteLine("Содержание:");
                        Console.WriteLine(matche.Groups["tegData"].Value);
                        Console.WriteLine("---------------------------");
                    } 
                }
                else
                {
                    Console.WriteLine("Ошибка при загрузке со страницы: " + my_url);
                }
            }
    
            private static async Task<string> GetHtmlPageText(string url)
            {  
                await Task.Run(async()=>{
                   
                    // ... используем HttpClient.
                    using (HttpClient client = new HttpClient())
                    using (HttpResponseMessage response = await client.GetAsync(url))
                    using (HttpContent content = response.Content)
                    {
                        // ... записать ответ
                        string result = await content.ReadAsStringAsync();
                        if (html != null)
                        {
                            html = result;
                        }
                    } 
                });
                return html;
            }
        }
    }


    результат на примере yandex.:
    <a href="http://mail.yandex.ru"onclick="c(this,17,1080)">Войти&nbsp;в&nbsp;почту</a>
    Содержание:
    Войти&nbsp;в&nbsp;почту


    Regex работает быстрее чем остальные парсеры
    Ответ написан
  • Progress Bar & Thread в C#?

    tomnolane
    @tomnolane
    профессиональный разработчик
    Kirill Rud: я не понял что вы в коде подразумеваете под "Downloder"... если это WebClient downloader= new WebClient(); то, у него есть специальный метод для асинхронной загрузки (чтобы не создавать отдельный поток)
    // DownloadFile(...) - загрузка в главном потоке
    downloader.DownloadFileAsync(new Uri("ввв.сайт.ру"), "C:\\temp.zip"); // - загружает асинхронно в отдельном потоке, т.е. "DATA.SubThread = new Thread(() =>" <- создавать не нужно.

    после чего "Downloder" нужно подписать на эвенты (события).. ниже в примере создаётся два события: во время загрузки и по окончанию загрузки:
    private void button1_Click(object sender, EventArgs e) //нажимаем кнопку "загрузить"
      {
       string url = "http://****.ру.*****1.zip";
       WebClient downloader = new WebClient();
       downloader.DownloadFileCompleted += new AsyncCompletedEventHandler(downloader_DownloadFileCompleted); // привязываем эвент когда файл загрузится
       downloader.DownloadProgressChanged += new DownloadProgressChangedEventHandler(downloader_DownloadProgressChanged); // привязываем эвент когда файл загружается (в процессе)
       downloader.DownloadFileAsync(new Uri(url), "C:\\temp.zip"); // загружаем не блокируя главный поток
      }
    
     void downloader_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) // событие по которому передается в прогресс бар кол-во процентов загруженной информации
       { 
          progressBar1.Value =  e.ProgressPercentage; // progressBar1 - ваш прогресс бар
        }
      void downloader_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e) // событие по окончанию загрузки (п.с. как пример, в рабочем варианте использовать MessageBox лучше не стоит, т.к. он блокирует основной поток (форма зависает, пока не нажмёте кнопку "ок")
       {
           if (e.Error != null)
             MessageBox.Show(e.Error.Message);
           else
             MessageBox.Show("Загружено!!!");
       }

    усё вроде...
    Ответ написан
    7 комментариев
  • Зависимость размера шрифтов от разрешения экрана?

    tomnolane
    @tomnolane
    профессиональный разработчик
    Через binding: тык
    (п.с. только вместо ползунка - размер экрана)
    System.Windows.SystemParameters.PrimaryScreenWidth;
    System.Windows.SystemParameters.PrimaryScreenHeight;

    п.с.с. доп.
    Ответ написан
  • Как возможно получить инстанс объекта по имени его статического класса?

    tomnolane
    @tomnolane
    профессиональный разработчик
    если нужна рефлексия, то вот:
    using System.Reflection;
    
    Assembly assembly = Assembly.LoadFrom(@"полный путь к dll в виде строки"); // загружаем dll 
                    Type type = assembly.GetType("Library2.MainWindow"); // namespace.class
                    dynamic obj = Activator.CreateInstance(type); //получаем/создаём объект
                    Window dd = (Window)obj; // преобразовываем объект как вам нужно, в данном случае создаётся объект WIndow (dll - от WPF)
                    dd.Show();  //и работает уже с ним...


    UPD

    Assembly assembly = Assembly.LoadFrom("https://tft.a*****.SDK.dll"); 
                    Type type = assembly.GetType("SkalarkiIO.SDK.Outputs+GLARE+FCU");
                    MethodInfo myMethodInfo = type.GetMethod("get_All");
                    var t = myMethodInfo.Invoke(type, null);
    Ответ написан
  • С помощью чего можно открыть pdf-файл?

    tomnolane
    @tomnolane
    профессиональный разработчик
    может через это ??? и вот ещё
    Ответ написан
    Комментировать
  • Как преобразовать из object в string[,]?

    tomnolane
    @tomnolane
    профессиональный разработчик
    в шапку добавить
    using System.Collections;

    string[,] str_arr = new string[2,2] {{"строка1-1","строка1-2"},{"строка2-1","строка2-2"}};
                object ojb = str_arr;
    
                string[,] target = new string[2, 2];
    
                var myList = ojb as IEnumerable; int i = 0; int y = 0;
                if (ojb != null)
                {
                    foreach (var element in myList)
                    {  
                        if (i != 0 && i % 2 == 0 && y == 0)
                        {
                            y = 1;
                        }
                        else if(y == 2)
                        {
                            y = 0; i++;
                        }
    
                        target[i,y] = element.ToString(); 
                         y++;
                    } 
                    Console.ReadKey();
                }


    и посмотреть что лежит в string[,] target уже будет не проблема...

    UPD

    object ojb = str_arr;
    
                string[,] target = new string[2000, 2];
    
                var string_Arr = ojb as IEnumerable; int i = 0; int y = 0;
                if (ojb != null)
                {
                    foreach (var elements in string_Arr)
                    { 
                        if (elements != null)
                        {
                            var enum_elements = elements as IEnumerable;
                            foreach (var elem in enum_elements)
                            {
                                if (i != 0 && i % 2 == 0 && y == 0)
                                {
                                    y = 1;
                                }
                                else if (y == 2)
                                {
                                    y = 0; i++;
                                }
    
                                target[i, y] = elem.ToString();
                                y++;
                            } 
                        } 
                    } 
                    Console.ReadKey();
                }


    п.с.с. я не уверен что где-то есть "специальный метод", чтобы также сделать.... максимум через linq переписать
    Ответ написан
    8 комментариев
  • Как переместить элементы из одного двумерного массива в другой сохранив порядок?

    tomnolane
    @tomnolane
    профессиональный разработчик
    static int[,] Func(int[,]Arr) //функция которая должна переставлять первый и второй столбец 
            {
                
                int[,] arr = new int[Arr.GetLength(0),Arr.GetLength(1)];
                
                int k;
                for (int i = 0; i < arr.GetLength(1); i++)
                {
                    for (int j = 0; j < arr.GetLength(0); j++)
                    {
                        arr[i, j] = Arr[i, j];
                    }
                }
                for (int i = 0; i < Arr.GetLength(0); i++)
                {
                    k = arr[i, 0]; //0 - индекс первого столбца
                    arr[i, 0] = arr[i, 1]; // 1 - индекс второго столбца
                    arr[i, 1] = k;
                }
                return arr;
             }


    п.с. рекомендую сначала гуглить (если типовые и вполне земные вопросы) и уж если никак не удалось - искать в тостере и уже потом задавать вопросы. Т.к. преодоление любой трудности - сначала должно быть с Вашей стороны, чтобы успешно развиваться в дальнейшем. Это к тому, что много в тостере повторяют одни и теже вопросы даже не вводя сам вопрос в поиске.
    Ответ написан
    1 комментарий
  • Нехватает знаний, язык c#?

    tomnolane
    @tomnolane
    профессиональный разработчик
    Книги - это хорошо, но есть одно но... пока вы не сядите и не начнёте делать, "заочно" выучить/понять будет крайне сложно. К примеру, поставте задачу: сделать... мини БД (судя по вопросу). Что для этого нужно? Открыть то, где это всё можно) (наверно Visual Studio) отлично подойдет.
    Потом, сначала выбрать WindowForms - т.к. wpf может оказаться немного по сложнее на первой этапе из-за разметки xaml (xaml -отдельная вселенная, где уйдут очень много месяцев изучения и практики, чтобы освоить до нормального уровня). Далее размещаем TextBox-ы кнопки и т.д. После этой "прелюдии" переходим в код. И тут как раз нужно пользоваться тем, что делают практически все) (п.с. это не открыть учебник) - открыть гугл/яндекс и ввести "база данных c# примеры" - смотрите, читаете, копипастите ) и так - "разведкой боем" - вы реально поймёте как работает. Т.к. после прочтения любой книги, вы забудите 2/3 того, что прочитано в начале и в середине уже ближе к концу (особенно в книге Троелсена ). И никого не слушайте - что мол, искать решения (готовые или частично готовые) гуглением - это плохо. Главный ИТ-шник гугла - 60% времени сам гуглит в поисках того, как и что можно сделать. И это будет лучше для вас. Т.к. Вы практически занимаетесь "практикой", читаете форумы, где всё "готово" или "почти готово" с разъяснениями. Так легче и проще втянуться (и набрать опыт) по c#. Одними книгами сыт не будешь. Практика и личные ошибки - самые лучшие учителя

    п.с. но для этого, конечно нужны хотябы базовые знания... о типах, классах, конструкторах, геттерах и сеттерах, об основных взаимодействиях между объектами (конкатенация, наследование, интерфейсы).
    Ответ написан
    3 комментария
  • Где можно скачать проекты WPF?

    tomnolane
    @tomnolane
    профессиональный разработчик
    Ответ написан
    Комментировать
  • C# TextBox: выводить значения в две колонки?

    tomnolane
    @tomnolane
    профессиональный разработчик
    как вариант
    <ListView  HorizontalAlignment="Left" Height="130" Margin="28,26,0,0" VerticalAlignment="Top" Width="263" ScrollViewer.VerticalScrollBarVisibility="Auto"    FontFamily="Times New Roman" FontWeight="Bold" FontSize="12" IsSynchronizedWithCurrentItem="True" Cursor="Hand"   >
                <ListView.Effect>
                    <DropShadowEffect/>
                </ListView.Effect>
                <ListView.View>
                    <GridView >
                        <GridView.ColumnHeaderContainerStyle >
                            <Style TargetType="GridViewColumnHeader">
                                <Setter Property="BorderThickness" Value="0"></Setter>
                                <Setter Property="BorderBrush" Value="Black"></Setter> 
                                <Setter Property="Background" Value="Bisque"></Setter>
                                <Setter Property="ContentTemplate">
                                    <Setter.Value>
                                        <DataTemplate>
                                            <TextBlock Width="140" TextWrapping="Wrap" Text="{Binding}"></TextBlock>
                                        </DataTemplate>
                                    </Setter.Value>
                                </Setter>
                            </Style>
                        </GridView.ColumnHeaderContainerStyle>
                        <GridView.Columns>
                            <GridViewColumn Header="Пользователь" " ></GridViewColumn>
                            <GridViewColumn Header="Кол-во подписчиков" "></GridViewColumn>
                        </GridView.Columns>
                    </GridView> 
                </ListView.View>
    </ListView>
    Ответ написан
    Комментировать
  • Как при word wrap узнать количество строк на которое разбит текст?

    tomnolane
    @tomnolane
    профессиональный разработчик
    TextWrapping - не разделяет само текстовое предложение на части (т.е. не вставляет "\n").

    узнать количество строк на которое разбит текст?

    подсчитайте кол-во букв сколько влазит в 1 одну стоку (из-за шрифта и его размера - данные могут быть разные... и наверно только вручную можно посмотреть)
    пускай это число будет равным 100, тогда (понадобится логика, скотч, и кусок кода на скорую руку)
    //вводные данные
    int temp_count_chars = 0;
                    string temp_predlojenie_stroka = String.Empty;
                    int all_chars = 100;
                    int colli4estvo_strok = 1;
                    string[] arr = textBox.Text.Split(new[] { ' ' }); 
                    foreach(string slovo in arr)
                    { 
                        if (all_chars >= slovo.Length && (temp_count_chars + slovo.Length) <= all_chars) // если слово меньше или равно общему кол-ву букв с троке и кол-во букв в этой строке вместе с новым словом меньше общей длины строки
                        {
                            if (!string.IsNullOrWhiteSpace(temp_predlojenie_stroka)) { temp_count_chars = temp_predlojenie_stroka.Length + 1;  temp_predlojenie_stroka = "";} //переносное слово с пробелом своим
    
                            temp_count_chars += slovo.Length + 1; // +1 (это пробел после каждого слова)
                            if (temp_count_chars >= all_chars)
                            {
                                colli4estvo_strok++; //переходим на новую строку
                                if (temp_count_chars != all_chars) // переносим слово
                                {
                                    temp_predlojenie_stroka = slovo + " ";
                                }
                                temp_count_chars = 0;
                            }
                        } 
                    }
    MessageBox.Show("Кол-во строк: " + colli4estvo_strok);

    скотч не пригодился - значит сэкономили...
    п.с. не проверял, на скорую руку делал
    Ответ написан
  • Чем отличаются ссылочные и знаковые типы?

    tomnolane
    @tomnolane
    профессиональный разработчик
    ЗнаЧимые типы хранят значение, а ссылочные - ссылку на значение. Не знаковые))
    class SSylka
    {
        public byte Value { get; set; }
    }
    
    struct Znachenie {
        public byte Value { get; set; }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            SSylka _ssylka = new SSylka { Value = 0 };
            Znachenie _znachenie = new Znachenie { Value = 0 };
        }
    }

    В коде и _ssylka , и _znachenie создаются как локальные переменные метода Main на стеке. Переменная _znachenie содержит значение Value, а переменная _ssylka содержит ссылку на значение Value, хранящееся на куче.

    Для ссылочных типов - это куча, для значимых - это стек. При этом, ссылочная переменная (сама ссылка) храниться на стеке. Значимыми могут быть только экземпляры структур

    (int, double и т.д.) - это структуры

    Мы "создаем переменную с типом MyStruct"?

    Вы* создаёте экземпляр (не путать с ссылкой) переменной в стеке типа MyStruct

    Могу я в стек засунуть к примеру файл?

    Cтек (stack) — это контейнер, работающий по принципу "последний вошел, первый вышел" (last in, first out — LIFO).
    Этот класс создает динамическую коллекцию, которая расширяется по мере потребности хранить в ней вводимые элементы. Всякий раз, когда требуется расширить такую коллекцию, ее емкость увеличивается вдвое.
    Т.е. можно, но вот зачем? Оптимизированнее будет - если будет в куче, чтобы GC (сборщик мусора) удалил его тогда, когда не нужен будет.... а если файл будет изменяться? (увеличиваться/уменьшаться?).... и так каждый раз при увеличении он будет занимать не всё "пространство" выделенное для него...
    Ответ написан
  • Как ограничить использование своего декстоп-приложения (.exe) только тем, кто зарегистрирован у меня на сайте (как это выглядит примерно?)?

    tomnolane
    @tomnolane Автор вопроса
    профессиональный разработчик
    решил пока так...
    Assembly assembly = Assembly.LoadFrom("https://мой_сайт.ru/Library2.dll");
                    Type type = assembly.GetType("Library2.MainWindow");
                    dynamic obj = Activator.CreateInstance(type);
                    Window extern= (Window)obj;
                    exnter .Show();  
    // extern- wpf переделанный в dll

    п.с. но в итоге лучше настроить свой API... если сроки позволяют
    Ответ написан
    Комментировать