110,568
社区成员
发帖
与我相关
我的任务
分享
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new 登陆());
}
private void handleMsg(string commandStr)
{
switch (commandStr)
{
case "LoginSuccess":
{
buff = new byte[data.Length - leng];
for (int j = 0; j < data.Length - leng; j++)
buff[j] = data[leng + j];
memStream = new MemoryStream(buff);
memStream.Seek(0, SeekOrigin.Begin);
obj = formatter.Deserialize(memStream);
memStream.Close();
if (obj != null && obj is User)
user = (User)obj;
frm = new 申请及扫描(user, this);
登陆.LoginFormDelegate closeDelegate = new 登陆.LoginFormDelegate(loginForm.loginFormAction); //申明委托
loginForm.Invoke(closeDelegate, new String[] { "close" }); //调用委托
ThreadPool.QueueUserWorkItem(new WaitCallback(showAppScanfDialog), frm);
}
break;
#endregion
#region 获取服务器发来的自己已申请的作业
case "ReFreshApp": //获取服务器发来的自己已申请的作业
///取出数据
buff = new byte[data.Length - leng];
for (int j = 0; j < data.Length - leng; j++)
buff[j] = data[leng + j];
申请及扫描.AppScanfDelegate appScanfDelegate = new 申请及扫描.AppScanfDelegate(frm.AppScanfFromAppAction);
frm.Invoke(appScanfDelegate, new Object[] { buff });
break;
#endregion
}
}
#region 给dagvApp绑定数据表
public void AppScanfFromAppAction(byte[] buffer)
{
DataTable dt = new DataTable();
memStream = new MemoryStream(buffer);
memStream.Seek(0, SeekOrigin.Begin);
dt = (DataTable)formatter.Deserialize(memStream);
memStream.Close();
dagvApp.DataSource = dt;
dagvApp.AllowUserToAddRows = false; //不显示datagridview中的空白行
}
#endregion
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
登陆 loginForm = new 登陆();
if (loginForm.ShowDialog() == DialogResult.OK)
{
Application.Run(new 申请及扫描());
}
}
private void handleMsg(string commandStr)
{
switch (commandStr)
{
#region 登陆成功
case "LoginSuccess":
{
loginForm.DialogResult = DialogResult.OK;
buff = new byte[data.Length - leng];
for (int j = 0; j < data.Length - leng; j++)
buff[j] = data[leng + j];
memStream = new MemoryStream(buff);
memStream.Seek(0, SeekOrigin.Begin);
obj = formatter.Deserialize(memStream);
memStream.Close();
if (obj != null && obj is User)
user = (User)obj;
}
break;
#endregion
#region 获取服务器发来的客户已申请的作业
case "ReFreshApp":
///取出数据
buff = new byte[data.Length-leng];
for (int j = 0; j < data.Length-leng; j++)
buff[j] = data[leng + j];
frm.AppScanfFromAppAction(buff);
//申请及扫描.AppScanfDelegate appScanfDelegate = new 申请及扫描.AppScanfDelegate(frm.AppScanfFromAppAction);
//frm.Invoke(appScanfDelegate, new Object[] { buff });
break;
#endregion
}
}
#region 给dagvApp绑定数据表
public void AppScanfFromAppAction(byte[] buffer)
{
DataTable dt = new DataTable();
memStream = new MemoryStream(buffer);
memStream.Seek(0, SeekOrigin.Begin);
dt = (DataTable)formatter.Deserialize(memStream);
memStream.Close();
dagvApp.DataSource = dt;
dagvApp.AllowUserToAddRows = false; //不显示datagridview中的空白行
}
#endregion
case "ReFreshApp": //获取服务器发来的自己已申请的作业
buff = new byte[data.Length-leng];
for (int j = 0; j < data.Length-leng; j++)
buff[j] = data[leng + j];
申请及扫描.AppScanfDelegate appScanfDelegate = new 申请及扫描.AppScanfDelegate(frm.AppScanfFromAppAction);
frm.Invoke(appScanfDelegate, new Object[] { buff });
break;
这个frm就是主窗体的对象,要是这么写的话会提示窗体句柄创建之前不能调用Invoke的错误。。[/quote]
线程的启动不要写在窗体的构造函数中,因为这时窗体并未创建完毕。
试试看写在窗体的Shown事件里。case "LoginSuccess":
{
loginForm.DialogResult = DialogResult.OK;
buff = new byte[data.Length - leng];
for (int j = 0; j < data.Length - leng; j++)
buff[j] = data[leng + j];
memStream = new MemoryStream(buff);
memStream.Seek(0, SeekOrigin.Begin);
obj = formatter.Deserialize(memStream);
memStream.Close();
if (obj != null && obj is User)
user = (User)obj;
frm = new 申请及扫描();
frm.ContactWithServer = this;
frm.User = user;
}
break;
case "ReFreshApp": //获取服务器发来的自己已申请的作业
buff = new byte[data.Length-leng];
for (int j = 0; j < data.Length-leng; j++)
buff[j] = data[leng + j];
申请及扫描.AppScanfDelegate appScanfDelegate = new 申请及扫描.AppScanfDelegate(frm.AppScanfFromAppAction);
frm.Invoke(appScanfDelegate, new Object[] { buff });
break;
这个frm就是主窗体的对象,要是这么写的话会提示窗体句柄创建之前不能调用Invoke的错误。。