日期:2014-05-19  浏览次数:20791 次

调用控件问题! 困扰好几天了!
现在有类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 ");
}

}
------解决方案--------------------
问题解决 还是靠自己啊 其实非常简单 不需要用什么委托 。

新建一个窗口只有进度条。
在传输开始,弹出窗口显示进度条,发送的时候给窗口发消息。

××××××××××××××××××××××

我和你一样做的