Welcome, Guest. Please login or register. Did you miss your activation email?

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Topics - Frog

Pages: [1]
1
DotNet / Editing Text object while in a task seems to break stuff
« on: February 04, 2022, 05:51:00 am »
heyo, i was getting really strange behavior from sfml text
after changing DisplayedString while in a task, one of many issues could occur:
  • System.AccessViolationException when drawing the text
  • System.AccessViolationException when trying to get its local/global bounds
  • crash but with no error
  • no crash but text is rendered with visual errors such as incorrect characters and or distorted characters
it seems like memory is getting corrupted somehow but im not exactly sure why
code:
using System;
using System.Threading;
using System.Threading.Tasks;
using SFML.Graphics;
using SFML.Window;

internal class Program {

        public static RenderWindow Window;

        public static void Main(string[] args) {
                Window = new RenderWindow(new VideoMode(640, 480), "Test");
                Window.SetFramerateLimit(60);

                var textHolder = new TextHolder();

                while (Window.IsOpen) {
                        Window.Clear();
                        Window.Draw(textHolder);
                        Window.Display();
                }
        }
}

internal class TextHolder : Drawable {

        private Text _text;

        public TextHolder() {
                _text = new Text("Initial String", new Font("arial.ttf"));

                Task.Run(() => {
                        Thread.Sleep(1000);
                        _text.DisplayedString = "ABCDEFGHIKLMNOPQRSTUVWXYZ";
                        Console.WriteLine(_text.GetLocalBounds().Width);
                });
        }

        public void Draw(RenderTarget target, RenderStates states) {
                target.Draw(_text);
        }
}
sorry if a missed anything

Pages: [1]
anything