示例#1
0
 protected override void OnAfterRender(bool firstRender)
 {
     base.OnAfterRender(firstRender);
     if (firstRender)
     {
         MonacoService.Initialize("container", DefaultCodeCSharp, "csharp");
     }
 }
示例#2
0
        async Task RunInternal()
        {
            Output = "";

            Console.WriteLine("Compiling and Running code");
            var sw = Stopwatch.StartNew();

            var currentOut = Console.Out;
            var writer     = new StringWriter();

            Console.SetOut(writer);

            Exception exception = null;

            try
            {
                var(success, asm) = CompilerService.LoadSource(MonacoService.GetCode("container"));
                if (success)
                {
                    var entry = asm.EntryPoint;
                    if (entry.Name == "<Main>")                                                                                            // sync wrapper over async Task Main
                    {
                        entry = entry.DeclaringType.GetMethod("Main", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static); // reflect for the async Task Main
                    }
                    var hasArgs = entry.GetParameters().Length > 0;
                    var result  = entry.Invoke(null, hasArgs ? new object[] { new string[0] } : null);
                    if (result is Task t)
                    {
                        await t;
                    }
                }
            }
            catch (Exception ex)
            {
                exception = ex;
            }
            Output = writer.ToString();
            if (exception != null)
            {
                Output += "\r\n" + exception.ToString();
            }
            Console.SetOut(currentOut);

            sw.Stop();
            Console.WriteLine("Done in " + sw.ElapsedMilliseconds + "ms");
            CompilerService.DispatchBlazorCodeCompiledEvent(sw.ElapsedMilliseconds);
            StateHasChanged();
        }