.NET 4.x Динамическая компиляция кода в приложении Windows Forms - C#
Формулировка задачи:
Кто может объяснить как использовать динамическую компиляцию кода в проекте с win forms? Мне необходима программа, которая бы считывала математическое выражение из textBox'a и выводила результат. Я могу сделать это используя консольное приложение, компилируя его через командную строку, но в проекте wf - выдаёт исключение InvalidOperationException - "возникает при попытке обращения к элементу пользовательского интерфейса из любого потока, отличного от того, в котором он был создан".
Ну например в такой программе возникает исключение:
Пробовал в source писать код а-ля windows forms, но тем не менее всё равно не работает
Хочу узнать просто как оформлять код в source. Остальное могу сделать сам
Заранее спасибо)
Листинг программы
- using System;
- using System.Windows.Forms;
- using Microsoft.CSharp;
- using System.CodeDom.Compiler;
- using System.Reflection;
- using System.Collections.Generic;
- using System.IO;
- namespace WindowsFormsApplication {
- public partial class Form1 : Form {
- public Form1() {
- InitializeComponent();
- }
- private void Form1_Load(object sender, EventArgs e) { }
- private void textBox1_TextChanged(object sender, EventArgs e) { }
- private void button1_Click(object sender, EventArgs e) {
- string source = @"
- class DCProgram {
- static void Main() {
- StreamWriter sw = new StreamWriter(" + "D:\\PROGRAMMING\\C#\\test.txt" + @");
- sw.WriteLine(" + "lalala" + @");
- sw.Close();
- }
- }
- ";
- Dictionary<string, string> providerOptions = new Dictionary<string, string> {
- {"CompilerVersion", "v4.5"}
- };
- CompilerParameters compilerParams = new CompilerParameters {
- OutputAssembly = "output.exe", GenerateExecutable = true
- };
- CSharpCodeProvider provider = new CSharpCodeProvider(providerOptions);
- CompilerResults results = provider.CompileAssemblyFromSource(compilerParams, source);
- // Вывод ошибок в файл
- StreamWriter sw = new StreamWriter("temp_log.txt");
- sw.WriteLine("Number of Errors: {0}", results.Errors.Count);
- foreach (CompilerError err in results.Errors) {
- sw.WriteLine("ERROR {0}", err.ErrorText);
- }
- sw.Close();
- }
- }
- }
Решение задачи: «.NET 4.x Динамическая компиляция кода в приложении Windows Forms»
textual
Листинг программы
- Func<int, int> func = (Func<int, int>)DynamicMethods.BuildFunc("System.Int32 x => x + x", "System.Int32");
- Console.WriteLine(func(4));
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д