1

I have read, that it could be possible to fuse UnityEngine with Winforms, so that is what I am trying to do. I am trying to use a sine wave to control the flickering between colors on a button in Winform. However I am getting a SecurityException which I do not konw how to solve.

    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));
        }

Here I open the new form, and the form hen diplays som characters, which can chosen, hereafter the form closes agian, and you return to the main, form 1.

1 Answers1

1

complete program:

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();
            }
        }
    }
}

and the form:

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;
            }
        }
    }
}

just add pictureBox1 to your form in your designer.

i would suggest writing the whole application in Microsoft XNA - it is easier to learn than Unity3D :)

Jinjinov
  • 2,554
  • 4
  • 26
  • 45