■
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 clrclr.AddReference("System")
clr.AddReference("System.Windows")btn = Page.FindName( "btn1" ) #
def OnClick1( sender, arg ):
btn.Content="正常に動作中!"
btn.Content="押してみて"
btn.Click += OnClick1