首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

调用控件有关问题! 困扰好几天了

2012-02-06 
调用控件问题! 困扰好几天了!现在有类A,窗口B,类A:socket接收数据想把接收情况用进度条反映出来,窗口B中有

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

}
[解决办法]
问题解决 还是靠自己啊 其实非常简单 不需要用什么委托 。

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

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

我和你一样做的

热点排行