现在有类A, 窗口B, 类A:socket接收数据想把接收情况用进度条反映出来, 窗口B中有个进度条控件。 那么如何调用这个控件呢? 最好有代码 。谢谢各位!
解决方案 »
- 如何使用C# 语言实现螺旋加上蛇形的动态生成矩阵?当n=4 ,矩阵是这样的 1 2 3 4 11 9 10 5 1512 8 6 16 14 13 7
- OnFormClosing
- C# 中如何对treeview进行操作?
- 对象的访问
- 请教:关于对象数组与Hashtable性能
- C#中如何获得多个menuitem事件的名称,并传递给另外的窗体
- Form验证为什么只对第一次登录时有效,登录过后,再次打开这个站点时,它不通过登录页就直接进去了.
- 自建邮件系统有什么要求
- 关于c#连接SQL server的问题。。求大神解答!
- 请问如何为button控件添加客户端事件.
- c# 控件 碰撞?
- c# 能不能水平翻转会动的gif图片
这里主要涉及到一个线程调试的问题,窗口线程和通讯线程!如果我们直接在窗口里,调用通讯接口,是无法进行单步调试的(但运行可以,实际上两者不同步)。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");
} }