忍者ブログ

Memeplexes

プログラミング、3DCGとその他いろいろについて

IronSchemeでWPFをつかう

先日はお騒がせました。
ちゃんと使えます
IronSchemeでもIron~~な他の言語でもWPFは使えます
前回コメントいただいた通りです。

ただC#のようなストレートな書き方ではなく、ちょっと回りくどくなります。
こうなりました:
(import (rnrs) (ironscheme clr))

(clr-reference PresentationFramework)
(clr-reference PresentationCore)
(clr-reference WindowsBase)

(clr-using System.Windows)
(clr-using System.Threading)

(define 
	runApplication
	(lambda 
		() 
		(define app (clr-new Application))
		(clr-call Application Run app (clr-new Window))))

(define staThread (clr-new Thread runApplication))
(clr-call Thread SetApartmentState staThread 'STA)
(clr-call Thread Start staThread)

IronSchemeWpf.jpg

C#ではこうなるでしょう
(ただし、事前に
PresentationFramework,
PresentationCore,
WindowsBase,
System.Xamlの参照を追加する必要あります):
using System.Windows;
using System.Threading;

class Program
{
    static void runApplication()
    {
        var app = new Application();
        app.Run(new Window());
    }

    static void Main(string[] args)
    {
        var staThread = new Thread(runApplication);
        staThread.SetApartmentState(ApartmentState.STA);
        staThread.Start();
    }
}

そうですね
STAThread属性を付けられないのなら、
別の方法でSTAThreadを走らせてやればよかったんですね。
ApartmentStateプロパティがObsoleteになっていたので勘違いしてしまいました。
(かわりにSetApartmentStateが使えます。)

拍手[0回]

PR