下面代码不多,但是是我上个月花了很长时间才写出来,不现在回过头再研究研究,其实也不难。
在其他的线程里,不能直接操作主窗体上的控件,必须通过IAsyncResult接口来调用(invoke)主窗口上的方法,来操作窗口上的控件。
在其他的线程里,不能直接操作主窗体上的控件,必须通过IAsyncResult接口来调用(invoke)主窗口上的方法,来操作窗口上的控件。
public System.Threading.Thread T_HcpChecker;
delegate void M_HcpChecker(bool checker,int index);
private void checkdvr()
{
System.Windows.Forms.TreeNode node = this.treeView1.SelectedNode;
string[] s = new string[3];
s = (string[])node.Tag;
tbIP.Text = s[0];
tbChannel.Text = s[1];
hcp.hcPlayer1.DVRIP = s[0].Replace(" ", "");
Int32 d = Int32.Parse(s[1]);
hcp.hcPlayer1.Channel = d;
this.button1.Enabled = false;
ShowMessage("Please wait……");
//创建线程
ooindex = this.treeView1.SelectedNode.Index;
T_HcpChecker = new System.Threading.Thread(new System.Threading.ThreadStart(Asy_HcpChecher));
T_HcpChecker.Start();
}
//线程上的方法
private void Asy_HcpChecher()
{
bool logfail;
if (!(hcp.hcPlayer1.HCPlayerInit() && hcp.hcPlayer1.HCPlayerLogin()))
{
logfail = true;
}
else
{
logfail = false;
}
try
{
//调用主窗口上的方法;
IAsyncResult result = this.BeginInvoke(new M_HcpChecker(HcpChecker), new object[] { logfail, ooindex });
object returnValue = this.EndInvoke(result);
}
catch { }
}
public void ShowMessage(string msg)
{
hcp.showMessage(msg);
this.labelMessage.Text = msg;
this.labelMessage.Refresh();
}
private void HcpChecker(bool logfail,int index)
{
if (ooindex == this.treeView1.SelectedNode.Index)
{
if (logfail)
ShowMessage("网络忙或注册失败!");
else
{
this.button1.Enabled = true;
ShowMessage("DVR注册成功!");
if (isPlayDvr)
playdvr();
hcp.hideMessage();
}
this.treeView1.Enabled = true;
ooindex = -1;
}
}
delegate void M_HcpChecker(bool checker,int index);
private void checkdvr()
{
System.Windows.Forms.TreeNode node = this.treeView1.SelectedNode;
string[] s = new string[3];
s = (string[])node.Tag;
tbIP.Text = s[0];
tbChannel.Text = s[1];
hcp.hcPlayer1.DVRIP = s[0].Replace(" ", "");
Int32 d = Int32.Parse(s[1]);
hcp.hcPlayer1.Channel = d;
this.button1.Enabled = false;
ShowMessage("Please wait……");
//创建线程
ooindex = this.treeView1.SelectedNode.Index;
T_HcpChecker = new System.Threading.Thread(new System.Threading.ThreadStart(Asy_HcpChecher));
T_HcpChecker.Start();
}
//线程上的方法
private void Asy_HcpChecher()
{
bool logfail;
if (!(hcp.hcPlayer1.HCPlayerInit() && hcp.hcPlayer1.HCPlayerLogin()))
{
logfail = true;
}
else
{
logfail = false;
}
try
{
//调用主窗口上的方法;
IAsyncResult result = this.BeginInvoke(new M_HcpChecker(HcpChecker), new object[] { logfail, ooindex });
object returnValue = this.EndInvoke(result);
}
catch { }
}
public void ShowMessage(string msg)
{
hcp.showMessage(msg);
this.labelMessage.Text = msg;
this.labelMessage.Refresh();
}
private void HcpChecker(bool logfail,int index)
{
if (ooindex == this.treeView1.SelectedNode.Index)
{
if (logfail)
ShowMessage("网络忙或注册失败!");
else
{
this.button1.Enabled = true;
ShowMessage("DVR注册成功!");
if (isPlayDvr)
playdvr();
hcp.hideMessage();
}
this.treeView1.Enabled = true;
ooindex = -1;
}
}
来源:https://www.cnblogs.com/zhanjh/archive/2007/07/13/816927.html