Исправить ошибку в коде (сериализация/десериализация) - C#

Узнай цену своей работы

Формулировка задачи:

Имеется код. Компилируется, но при попытке открыть файл/сохранить выдает ошибку: Необработанное исключение типа "System.Threading.ThreadStateException" в System.Windows.Forms.dll Вот, собственно, сам код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing;
using System.IO;
 
namespace Point
{
    class Point
    {
        protected int x;
        protected int y;
 
        public Point()
        {
            x = 5;
            y = 5;
        }
 
        public Point(int k, int g)
        {
            x = k;
            y = g;
        }
 
        public Point(Point p)
        {
            x = p.x;
            y = p.y;
        }
 
        public int getx()
        {
            return x;
        }
 
        public int gety()
        {
            return y;
        }
 
        public void setx(int t)
        {
            x = t;
        }
 
        public void sety(int t)
        {
            y = t;
        }
 
        public double distance(Point p)
        {
            return Math.Sqrt((x - p.x) * (x - p.x) + (y - p.y) * (y - p.y));
        }
 
        public void plus(Point p)
        {
            x = x + p.x;
            y = y + p.y;
        }
 
        public bool testconv(Point p)
        {
            if ((x == p.x) && (y == p.y)) return true;
            else return false;
        }
 
        public void displayin()
        {
            Console.WriteLine(" enter point\n");
            x = y = Convert.ToInt32(Console.ReadLine());
        }
 
        public virtual void displayout()
        {
            Console.WriteLine(string.Format("Point({0},{1})\n", x, y));
        }
 
        class PColor : Point
        {
            private string c;
 
            public override void displayout()
            {
                Console.WriteLine("Color " + c);
            }
 
            public PColor()
            {
                c = "white";
            }
 
            public PColor(int x1, int y1, string c1) : base(x1, y1)
            {
                c = c1;
            }
 
            public PColor(PColor p) : base(p)
            {
                c = p.c;
            }
        }
 
        /*static void Main(string[] args)
        {
            int x, y;
            Point a = new Point();
            a.displayout();
            a.displayin();
            Console.WriteLine("you entered: " + a.getx() + " " + a.gety());
            a.displayout();
            Console.WriteLine("copy constructor test: ");
            Point b = new Point(a);
            b.displayout();
            Console.WriteLine("enter x,y:\n");
            x = Convert.ToInt32(Console.ReadLine());
            y = Convert.ToInt32(Console.ReadLine());
            a.setx(x);
            a.sety(y);
            Console.WriteLine("setter test: ");
            a.displayout();
            Console.WriteLine("parameter constructor test: ");
            Point c = new Point(x, y);
            c.displayout();
            Console.WriteLine("distance: " + c.distance(b));
            if (b.testconv(c)) Console.WriteLine("they are equal\n");
            else Console.WriteLine("they are not equal\n");
            Console.WriteLine("adding points result: ");
            a.plus(b);
            a.displayout();
 
            PColor f = new PColor();
            f.displayout();
 
            PColor f1 = new PColor(3, 3, "green");
            f1.displayout();
 
            PColor f2 = new PColor(f1);
            f2.displayout();
 
            Console.ReadKey();
        }*/
    }
 
    class Program : Form
    {
        private List<Point> points;
 
        public Program()
        {
            points = new List<Point>();
 
            Menu = new MainMenu();
 
            MenuItem menuFile = new MenuItem("File");
            Menu.MenuItems.Add(menuFile);
 
            MenuItem menuOpen = new MenuItem("Open");
            menuOpen.Click += new EventHandler(this.onOpen);
            menuFile.MenuItems.Add(menuOpen);
 
            MenuItem menuSaveAs = new MenuItem("Save as");
            menuSaveAs.Click += new EventHandler(this.onSaveAs);
            menuFile.MenuItems.Add(menuSaveAs);
 
            this.Paint += new PaintEventHandler(this.onPaint);
            this.MouseClick += new MouseEventHandler(this.onClick);
        }
 
        private void onOpen(object sender, EventArgs e)
        {
            OpenFileDialog fd = new OpenFileDialog();
            fd.DefaultExt = "pnt";
            fd.Filter = "Text files (*.pnt)|*.pnt|All files (*.*)|*.*";
            fd.ShowDialog();
 
            if (fd.FileName != "")
            {
                points.Clear();
 
                Stream s = File.OpenRead(fd.FileName);
                BinaryReader r = new BinaryReader(s);
 
                int size = r.ReadInt32();
 
                for (int i = 0; i < size; i++)
                {
                    int x = r.ReadInt32();
                    int y = r.ReadInt32();
                    points.Add(new Point(x, y));
                }
 
                r.Close();
                Refresh();
            }
        }
 
        private void onSaveAs(object sender, EventArgs e)
        {
            SaveFileDialog fd = new SaveFileDialog();
            fd.DefaultExt = "graph";
            fd.Filter = "Text files (*.pnt)|*.pnt|All files (*.*)|*.*";
            fd.ShowDialog();
 
            if (fd.FileName != "")
            {
                Stream s = File.OpenWrite(fd.FileName);
                BinaryWriter w = new BinaryWriter(s);
 
                w.Write((Int32)points.Count);
 
                points.ForEach(delegate (Point point) {
                    w.Write((Int32)point.getx());
                    w.Write((Int32)point.gety());
                });
 
                w.Close();
            }
        }
 
        private void onPaint(object sender, PaintEventArgs e)
        {
            points.ForEach(delegate (Point point) {
                e.Graphics.FillRectangle(Brushes.Black, point.getx(), point.gety(), 1, 1);
            });
        }
 
        private void onClick(object sender, MouseEventArgs e)
        {
            Point point = new Point(e.X, e.Y);
            points.Add(point);
            Refresh();
        }
 
        public static void Main(string[] args)
        {
            Application.Run(new Program());
        }
    }
}
Простите за дубль, не знал в какой именно раздел обращаться.

Решение задачи: «Исправить ошибку в коде (сериализация/десериализация)»

textual
Листинг программы
[STAThread]
        public static void Main(string[] args)
        {
            Application.Run(new Program());
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.429 из 5