У меня есть код C# для простой формы окна с 3 кнопками. Кнопка 1 вызывает R и отображает поверхность, а кнопка 2 - контур. Если я запустил приложение и нажал кнопку 1, я правильно посмотрел на графику, но тогда я бы хотел нажать кнопку 2, чтобы открыть новое окно с контуром счетчика. К сожалению, если я попытаюсь сделать это, приложение замерзает, и я не могу продолжать. Поэтому я добавил кнопку 3 с намерением закрыть движок R, если он запущен. Идея состояла в том, чтобы убить экземпляр R и снова открыть его при нажатии на кнопку 2. Но это тоже не сработает. Есть ли способ исправить мою проблему?Графы с несколькими окнами R в C# с RDotNet
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using RDotNet;
namespace mySurface
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public void button1_Click(object sender, EventArgs e)
{
string dllPath = @"C:\Program Files\R\R-3.1.0\bin\i386\";
REngine.SetDllDirectory(dllPath);
REngine.CreateInstance("RDotNet");
REngine engine = REngine.GetInstanceFromID("RDotNet");
if (engine.IsRunning == false)
{
engine.Initialize();
}
var x = engine.Evaluate("x <- 1:100").AsNumeric();
var y = engine.Evaluate("y <- 5:105").AsNumeric();
engine.Evaluate("model = function (a, b){23.86+5.525*b-2.5725*a-6.6413*b^2-5.1862*a^2}"); //evaluate function
engine.Evaluate("z = outer(x, y ,model)");
engine.Evaluate("persp(x,y,z)");
//Console.WriteLine(x[0]);
}
public void button2_Click(object sender, EventArgs e)
{
string dllPath = @"C:\Program Files\R\R-3.1.0\bin\i386\";
REngine.SetDllDirectory(dllPath);
REngine.CreateInstance("RDotNet");
REngine engine = REngine.GetInstanceFromID("RDotNet");
if (engine.IsRunning == false)
{
engine.Initialize();
}
var x = engine.Evaluate("x <- 1:100").AsNumeric();
var y = engine.Evaluate("y <- 5:105").AsNumeric();
engine.Evaluate("model = function (a, b){23.86+5.525*b-2.5725*a-6.6413*b^2-5.1862*a^2}"); //evaluate function
engine.Evaluate("z = outer(x, y ,model)");
engine.Evaluate("contour(x,y,z, nlevels = 10)");
//Console.WriteLine(x[0]);
}
private void button3_Click(object sender, EventArgs e)
{
REngine engine = REngine.GetInstanceFromID("RDotNet");
if (engine.IsRunning == false)
{
engine.Close();
}
}
}
}