就是直接创建一个窗口,然后调了大小,传入了一个类的实例(这个类线程并发程度还挺高的,但排查并不是这个的问题)
然后创建,show() 后就卡住,主窗口正常,这个窗口不响应任何事件
求解,附源码工程
主窗口
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using AudioBOX;
using AudioBOX.windows;
namespace Cutwndtest
{
/// <summary>
/// Description of MainForm.
/// </summary>
public partial class MainForm : Form
{
public MainForm()
{
//
// The InitializeComponent() call is required for Windows Forms designer support.
//
InitializeComponent();
//
// TODO: Add constructor code after the InitializeComponent() call.
//
}
void Button1Click(object sender, EventArgs e)
{
ProgramData pg=new ProgramData();
pg.cutoption=1;
pg.cutwndshown=0;
MAIN ma=new MAIN();
(new System.Threading.Thread(()=>ma.cutbitmapadapter(pg))).Start();
}
}
}
主后台
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Threading;
using System.IO;
using AudioBOX;
using AudioBOX.windows;
namespace AudioBOX
{
/// <summary>
/// Description of MAIN.
/// </summary>
public class ProgramData
{
#region tipbox
public string tiptext=String.Empty;
public int tipstate=0;//---0:none---1:alert---2:error---3:state---4:alwayserror
public string alerttext=String.Empty;
public string statetext=String.Empty;
#endregion
public Color windowtheme;
public double mainprocess;
public string resultstring=String.Empty;
#region record
public double volume=0;
public int recordstate=0;//---0:none---1:recording---3.loadfile---4.outputfile recording---5:outputfile done
public string recordfilepath=String.Empty;
#endregion
#region cut
public Bitmap cutbitmap=null;
public int cutstate=0; //---0:no act---1:tostring(realtime)
public int bmpoutput=0;//---0:no---1:will output
public int cutoption=0; //---0:uninitinstanced---1:toolwindow---2:allscreen---
public int needtostring=0;
public int cutwndshown=0;
#endregion
}
public class MAIN
{
int updatetimer=50;
public void cutbitmapadapter(ProgramData programdata)
{
Cutwnd cw=new Cutwnd();
while(true)
{
Thread.Sleep(200);
if(programdata.cutoption==0||programdata.cutoption==2)
{
}
if(programdata.cutoption==1)
{
if(programdata.cutwndshown==0)
{
programdata.cutwndshown=1;
cw=new Cutwnd();
cw.programdata=programdata;
cw.Show();
}
}
if(programdata.cutoption==2)
{
}
}
}
}
}
窗口(问题所在)
using System;
using System.Drawing;
using System.Windows.Forms;
namespace AudioBOX.windows
{
/// <summary>
/// Description of Cutwnd.
/// </summary>
public partial class Cutwnd : Form
{
public ProgramData programdata;
public Cutwnd()
{
//
// The InitializeComponent() call is required for Windows Forms designer support.
//
InitializeComponent();
//
// TODO: Add constructor code after the InitializeComponent() call.
//
// this.TransparencyKey=this.BackColor=Color.AliceBlue;
}
void CutwndShown(object sender, EventArgs e)
{
programdata.cutwndshown=1;
}
void MiantimerTick(object sender, EventArgs e)
{
if(programdata.cutoption!=1)
{
this.Close();
this.Dispose();
}
}
}
}