csharpc-sharpdotnetxamlavaloniauicross-platformcross-platform-xamlavaloniaguimulti-platformuser-interfacedotnetcore
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
2.2 KiB
69 lines
2.2 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
using System.Windows.Threading;
|
|
using Avalonia.Designer.AppHost;
|
|
using Avalonia.Designer.Comm;
|
|
|
|
namespace Avalonia.Designer
|
|
{
|
|
class Program
|
|
{
|
|
[STAThread]
|
|
static void Main(string[] args)
|
|
{
|
|
if (!args.Contains("--hosted"))
|
|
DemoMain(args);
|
|
else
|
|
HostedMain();
|
|
|
|
|
|
}
|
|
|
|
static void HostedMain()
|
|
{
|
|
//Initialize sync context
|
|
SynchronizationContext.SetSynchronizationContext(new WindowsFormsSynchronizationContext());
|
|
var comm = new CommChannel(Console.OpenStandardInput(), Console.OpenStandardOutput());
|
|
Console.SetOut(new NullTextWriter());
|
|
Console.SetError(new NullTextWriter());
|
|
comm.Disposed += () => Process.GetCurrentProcess().Kill();
|
|
comm.SendMessage(new StateMessage("Staying awhile and listening..."));
|
|
var service = new AvaloniaAppHost(comm);
|
|
service.Start();
|
|
Application.Run();
|
|
}
|
|
|
|
class NullTextWriter : TextWriter
|
|
{
|
|
public override Encoding Encoding => Encoding.UTF8;
|
|
public override void Write(char[] buffer, int index, int count)
|
|
{
|
|
}
|
|
|
|
public override void Write(char value)
|
|
{
|
|
}
|
|
}
|
|
|
|
private static void DemoMain(string[] args)
|
|
{
|
|
SynchronizationContext.SetSynchronizationContext(new DispatcherSynchronizationContext());
|
|
var app = new App();
|
|
const string targetExe = "--exe=";
|
|
const string xaml = "--xaml=";
|
|
const string source = "--source=";
|
|
|
|
app.Run(new DemoWindow(
|
|
args.Where(a => a.StartsWith(targetExe)).Select(a => a.Substring(targetExe.Length)).FirstOrDefault(),
|
|
args.Where(a => a.StartsWith(xaml)).Select(a => a.Substring(xaml.Length)).FirstOrDefault(),
|
|
args.Where(a => a.StartsWith(source)).Select(a => a.Substring(source.Length)).FirstOrDefault()));
|
|
}
|
|
}
|
|
}
|
|
|