更新版はこちらへ

Silverlight2.0 BETA2 で動作を確認したIronPythonをダウンロードし実行するプログラム。
参照設定にIronPython, IronPython.Modules, Microsoft.Scripting.Coreを追加。

*Silverlight2.0 RC0 (Dynamic Language SDK 0.4.0)ではビルドできない。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

using IronPython.Compiler;
using IronPython.Hosting;
using IronPython.Runtime;
using Microsoft.Scripting;
using Microsoft.Scripting.Hosting;

namespace SilverlightApplication_PythonDownload
{
public partial class Page: UserControl
{
public Page()
{
InitializeComponent();

_globals.SetVariable("Page", this );

DLScriptExec( "init.py");
}

ScriptEngine _py = PythonEngine.CurrentEngine;
ScriptScope _globals = PythonEngine.CurrentEngine.Runtime.Globals;

/// <summary>
/// download script file and execute.
/// </summary>
/// <param name="scFileName"></param>
void DLScriptExec( string scFileName )
{
this.Cursor = Cursors.Wait;

try
{
WebClient wc = new WebClient();
wc.DownloadStringCompleted += (seder, e ) =>
{
string src = e.Result;
ScriptExec( src );

this.Cursor = Cursors.Arrow;
};

Uri uri = new Uri( System.Windows.Browser.HtmlPage.Document.DocumentUri, scFileName);
wc.DownloadStringAsync( uri );
}
catch( Exception ex)
{
string err = ex.Message;
}
finally
{

}
}

/// <summary>
/// execute script.
/// </summary>
/// <param name="src"></param>
/// <returns></returns>
object ScriptExec( string src )
{
ScriptSource sc = _py.CreateScriptSourceFromString( src, SourceCodeKind.Statements );
return sc.Execute( PythonEngine.CurrentEngine.Runtime.Globals );
}
}
}


init.pyは以下。


import clr

clr.AddReference("System")
clr.AddReference("System.Windows")

btn = Page.FindName( "btn1" ) #