发生安全异常

SecurityException occurred

我已经读到,可以将 UnityEngineWinforms 融合,所以这就是我想要做的。我正在尝试使用正弦波来控制 Winform 中按钮上颜色之间的闪烁。但是我得到了一个 SecurityException,我不知道如何解决。

    private void DisplayMessage(string messge)
    {
        int numVal;
        //SPELL.Text += messge + Environment.NewLine;

        numVal = Convert.ToInt32(messge);
        udpSock1.Close();
        if (numVal == 83)
        {

        //Application.EnableVisualStyles();
        //Application.SetCompatibleTextRenderingDefault(false);
        //Application.Idle += new EventHandler(Application_Idle);
        //Application.Run(form1);
            BCI1 form1 = new BCI1();
            //Application.Run(form1);
            form1.ShowDialog();
            //stopwatch.Start();
            SPELL.Text = SPELL.Text + form1.LET;

            udpSock1 = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            udpSock1.Bind(new IPEndPoint(IPAddress.Any, 8050));
            buffer = new byte[1024];

            newClientEP = new IPEndPoint(IPAddress.Any, 0);
            udpSock1.BeginReceiveFrom(buffer, 0, buffer.Length, SocketFlags.None, ref newClientEP, DoReceiveFrom, udpSock1);

            //udpSock.Disconnect(true);
            //udpSock.Connect(new IPEndPoint(IPAddress.Any, 8050));
        }

这里我打开新的表格,表格会显示s​​om字符,可以选择,然后表格关闭agian,你return到主表格1。

完整节目:

using System;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Security;
using System.Windows.Forms;

namespace Flicker
{
    static class Program
    {
        [StructLayout(LayoutKind.Sequential)]
        private struct Message
        {
            public IntPtr hWnd;
            public int msg;
            public IntPtr wParam;
            public IntPtr lParam;
            public uint time;
            public Point p;
        }

        [return: MarshalAs(UnmanagedType.Bool)]
        [SuppressUnmanagedCodeSecurity, DllImport("user32.dll", CharSet = CharSet.Auto)]
        private static extern bool PeekMessage(out Message msg, IntPtr hWnd, uint messageFilterMin, uint messageFilterMax, uint flags);

        static Form1 form;

        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            form = new Form1();
            Application.Idle += new EventHandler(Application_Idle);
            Application.Run(form);
        }

        static void Application_Idle(object sender, EventArgs e)
        {
            Message message;
            while (!PeekMessage(out message, IntPtr.Zero, 0, 0, 0))
            {
                form.UpdateFrame();
            }
        }
    }
}

和表格:

using System;
using System.Diagnostics;
using System.Windows.Forms;

namespace Flicker
{
    public partial class Form1 : Form
    {
        Stopwatch stopwatch = new Stopwatch();

        public Form1()
        {
            InitializeComponent();

            stopwatch.Start();
        }

        public void UpdateFrame()
        {
            double cycleHz = 0.001;

            double wave = Math.Sin((stopwatch.ElapsedMilliseconds * 2.0 * Math.PI) * cycleHz);

            if (wave > 0.0)
            {
                pictureBox1.BackColor = System.Drawing.Color.Black;
            }
            else
            {
                pictureBox1.BackColor = System.Drawing.Color.White;
            }
        }
    }
}

只需将 pictureBox1 添加到设计器中的表单即可。

我建议用 Microsoft XNA 编写整个应用程序 - 它比 Unity3D 更容易学习:)