调用控件问题! 困扰好几天了!
现在有类A, 窗口B, 类A:socket接收数据想把接收情况用进度条反映出来, 窗口B中有个进度条控件。 那么如何调用这个控件呢? 最好有代码 。谢谢各位!
------解决方案--------------------在窗口B中调用类A就没什么问题了吧。
------解决方案--------------------委托...
------解决方案--------------------窗口B中建立A的实例,然后用A:socket设置进度条的进度。
------解决方案--------------------............
------解决方案--------------------lz:
这里主要涉及到一个线程调试的问题,窗口线程和通讯线程!如果我们直接在窗口里,调用通讯接口,是无法进行单步调试的(但运行可以,实际上两者不同步)。net提供了一个很好的解决办法:类似C++的回调机制,Control.Invoke 方法 :在拥有此控件的基础窗口句柄的线程上执行委托。
代码实例:
private void Start_Click(object sender, EventArgs e)
{
tempPort = GetPort(true);
bool bSucc = myClient.Connect(currUnion.strIP, tempPort);
Thread thread = new Thread(new ThreadStart(MyReceive));//启动接收线程
auxThread = thread;
if (myClient.IsConn)
myClient.Send(sendBytes);
else
{
MessageBox.Show( "连接中断? ", "信息提示: ", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
return;
}
thread.Start();
}
}
private void MyReceive()
{
try
{
while (!bControl)
{
int num = myClient.Receive(receBytes);
if (num > 0)
{
this.Invoke(MyDelegate, receBytes);//在拥有控件的基础窗口句柄的线程上,用指定的参数列表执行指定委托。
}
Array.Clear(receBytes, 0, 536);
}
}
catch (Exception ex)
{
//MessageBox.Show(ex.Message + "MyReceive ");
}
}
------解决方案--------------------问题解决 还是靠自己啊 其实非常简单 不需要用什么委托 。
新建一个窗口只有进度条。
在传输开始,弹出窗口显示进度条,发送的时候给窗口发消息。
××××××××××××××××××××××
我和你一样做的