IronPython ホストとして動作する WinForm が必要です。IronPython の実行時に、スクリプトは UI を更新して進行状況を報告できます。次のコードがあり、UI を更新しますが、ウィンドウが応答しないという問題があります。助けていただければ幸いです。
namespace TryAsyncReport
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//use python
private async void button1_Click(object sender, EventArgs e)
{
IProgress<ProgressReportInfo> progress = new Progress<ProgressReportInfo>(ReportProgress);
await Task.Run(() =>
{
ScriptEngine engine = Python.CreateEngine();
ScriptScope scope = engine.CreateScope();
string script = "for i in range(1000000):\r\n";
script += " progress.Report(ProgressReportInfo(i / 10000, str(i / 10000)));\r\n";
scope.SetVariable("progress", progress);
scope.SetVariable("ProgressReportInfo", typeof(ProgressReportInfo));
var code = engine.CreateScriptSourceFromString(script);
code.Execute(scope);
});
}
private void ReportProgress(ProgressReportInfo info)
{
progressBar1.Value = info.Percentage;
label1.Text = info.Status;
}
}
public class ProgressReportInfo
{
public ProgressReportInfo(int percentage, string status)
{
Percentage = percentage;
Status = status;
}
public int Percentage { set; get; }
public string Status { set; get; }
}
}