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.
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 :)