在winForm应用程序中,如何实现多个窗口只用一个线程,多个窗口都是使用那一个线程。。
例如,我做一个用户在线的列表(主程序),其内写了个线程用来监听来自其他用户的信息,我也可以点选列表中的用户与其进行聊天!(只用一个线程监听!)
例如,我做一个用户在线的列表(主程序),其内写了个线程用来监听来自其他用户的信息,我也可以点选列表中的用户与其进行聊天!(只用一个线程监听!)
解决方案 »
- dataGridView控件设置当前行为7后,但实际选中还是为第0行
- 修改dataGridView中的值,提示不能插入重复值
- 委托传参数
- Knight94(愚翁)进来:windows服务
- 在用程序动态添加控件时,如何控制控件的顺序位置?
- 关于WaitHandle.WaitAll()的问题,高手请进
- 给点建议——用.NET和SQL Server做点什么有意思的
- 如何将输入的字符串转换为一个可求解的函数
- 在Richtextbox中,如何得到光标(不是鼠标)所在的行号和列号。
- 怎么使用string类里的Replace方法???(在线等)
- 如果有多个DropDownList,如何查询?
- C#中的拷贝构造函数在什么情况下使用
{
//在第一次引用类的任何成员时创建实例.公共语言运行库负责处理变量初始化
private static readonly Thread myThread = new Thread(Threadfunction); private SingleThread() { } public static SingleThreadGetInstance()
{
return myThread ;
}
}
-------------------------------------STA: Single-Thread Apartment, 中文叫单线程套间。就是在COM库初始化的时候创建一个内存结构,然后让它和调用CoInitialize的线程相关联。这个内存结构针对每个线程都会有一个。支持STA的COM对象只能在创建它的线程里被使用,其它线程如果再创建它就会失败。
MTA: Mutil-Thread Apartment,中文叫多线程套间。COM库在进程中创建一个内存结构,这个内存结构在整个进程中只能有一个,然后让它和调用CoInitializeEx的线程相关联。支持MTA的COM对象可以在任意线程里被使用。多有针对它的调用都会被封装成为消息。
其实STA和MTA是COM规定的一套线程模型,用于保障多线程情况下你的组件代码的同步。比如说有一个COM对象它内部有一个静态变量 gHello,那么这个对象无论生成多少实例对于gHello在内存中只能有一份,那么如果有两个不同的实例在两个线程里面同时去读写它,就有可能出错,所以就要就要有种机制进行同步保护,STA或者MTA就是这种机制。
textBox.Invoke(Delegate method,
params Object[] args)