我已经读过,可以将UnityEngine
与Winforms
融合,这就是我要做的事情。我正在尝试使用正弦波来控制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));
}
在这里,我打开新的表单,并且表格母鸡可以选择som字符,此后表单将关闭agian,然后返回主表单,形式为1。
答案 0 :(得分: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更容易学习:)