.NET 4.x Динамическая компиляция кода в приложении Windows Forms - C#

Узнай цену своей работы

Формулировка задачи:

Кто может объяснить как использовать динамическую компиляцию кода в проекте с win forms? Мне необходима программа, которая бы считывала математическое выражение из textBox'a и выводила результат. Я могу сделать это используя консольное приложение, компилируя его через командную строку, но в проекте wf - выдаёт исключение InvalidOperationException - "возникает при попытке обращения к элементу пользовательского интерфейса из любого потока, отличного от того, в котором он был создан". Ну например в такой программе возникает исключение:
Листинг программы
  1. using System;
  2. using System.Windows.Forms;
  3. using Microsoft.CSharp;
  4. using System.CodeDom.Compiler;
  5. using System.Reflection;
  6. using System.Collections.Generic;
  7. using System.IO;
  8. namespace WindowsFormsApplication {
  9. public partial class Form1 : Form {
  10. public Form1() {
  11. InitializeComponent();
  12. }
  13. private void Form1_Load(object sender, EventArgs e) { }
  14. private void textBox1_TextChanged(object sender, EventArgs e) { }
  15. private void button1_Click(object sender, EventArgs e) {
  16. string source = @"
  17. class DCProgram {
  18. static void Main() {
  19. StreamWriter sw = new StreamWriter(" + "D:\\PROGRAMMING\\C#\\test.txt" + @");
  20. sw.WriteLine(" + "lalala" + @");
  21. sw.Close();
  22. }
  23. }
  24. ";
  25. Dictionary<string, string> providerOptions = new Dictionary<string, string> {
  26. {"CompilerVersion", "v4.5"}
  27. };
  28. CompilerParameters compilerParams = new CompilerParameters {
  29. OutputAssembly = "output.exe", GenerateExecutable = true
  30. };
  31. CSharpCodeProvider provider = new CSharpCodeProvider(providerOptions);
  32. CompilerResults results = provider.CompileAssemblyFromSource(compilerParams, source);
  33. // Вывод ошибок в файл
  34. StreamWriter sw = new StreamWriter("temp_log.txt");
  35. sw.WriteLine("Number of Errors: {0}", results.Errors.Count);
  36. foreach (CompilerError err in results.Errors) {
  37. sw.WriteLine("ERROR {0}", err.ErrorText);
  38. }
  39. sw.Close();
  40. }
  41. }
  42. }
Пробовал в source писать код а-ля windows forms, но тем не менее всё равно не работает Хочу узнать просто как оформлять код в source. Остальное могу сделать сам Заранее спасибо)

Решение задачи: «.NET 4.x Динамическая компиляция кода в приложении Windows Forms»

textual
Листинг программы
  1.       Func<int, int> func = (Func<int, int>)DynamicMethods.BuildFunc("System.Int32 x => x + x", "System.Int32");
  2.  
  3.       Console.WriteLine(func(4));

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.9 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы