C# C中的多线程WinForms#
任何人都可以在C#中为多线程Windows窗体检索书籍或其他联机资源吗? 我最感兴趣的是了解有关此主题的更多信息,特别是在GUI应用程序的上下文中,该应用程序在后台发送消息并侦听服务器的响应 非常感谢,,C# C中的多线程WinForms#,c#,winforms,C#,Winforms,任何人都可以在C#中为多线程Windows窗体检索书籍或其他联机资源吗? 我最感兴趣的是了解有关此主题的更多信息,特别是在GUI应用程序的上下文中,该应用程序在后台发送消息并侦听服务器的响应 非常感谢,, MK我不知道是否有关于WinForms和多线程的专门书籍。有一些书讨论了.NET异步编程模型,该模型在WinForms和WPF编程中被大量使用 朱瓦尔·洛维(OReilly出版社)和杰弗里·里克特(微软出版社)的尝试。这应该让你开始学习。我不知道是否有关于WinForms和多线程的专门书籍。有
MK我不知道是否有关于WinForms和多线程的专门书籍。有一些书讨论了.NET异步编程模型,该模型在WinForms和WPF编程中被大量使用
朱瓦尔·洛维(OReilly出版社)和杰弗里·里克特(微软出版社)的尝试。这应该让你开始学习。我不知道是否有关于WinForms和多线程的专门书籍。有一些书讨论了.NET异步编程模型,该模型在WinForms和WPF编程中被大量使用 朱瓦尔·洛维(OReilly出版社)和杰弗里·里克特(微软出版社)的尝试。这应该可以让你开始了。我是第二个,但是Joe Duffy做了更深入的多线程和并发处理,如果这是你想要的 编辑:也涵盖了这个主题,如果你还没有一本WinForms的话,这是一本非常好的(可读的)通用WinForms书籍,我想是第二本,但是Joe Duffy的多线程和并发性更深入,如果你正在寻找的话
编辑:也涵盖了该主题,如果您还没有Bill Wagner的本主题演讲以及许多其他有用的演讲,那么它是一本非常好(可读)的WinForms通用书籍。Bill Wagner的本主题演讲,与许多其他有用的软件一起。我建议您研究一下retlang,它从根本上改变了我编写应用程序的方式。 快速而肮脏的示例,可能会也可能不会将lissens编译为某个服务器消息字符串,并将其显示在文本框中
using Retlang.Channels;
using Retlang.Fibers;
using Retlang.Core;
public partial class FooForm: Form
{
PoolFiber _WorkFiber; //backround work fiber
FormFiber _FormFiber; //this will marshal the messages to the gui thread
Channel<string> _ServerMessageChannel;
bool _AbortWork = false;
public FooForm()
{
InitializeComponent();
_ServerMessageChannel= new Channel<string>();
_WorkFiber = new PoolFiber();
_FormFiber = new _Fiber = new FormFiber(this,new BatchAndSingleExecutor());
_WorkFiber.Start(); //begin recive messages
_FormFiber .Start(); //begin recive messages
_WorkFiber.Enqueue(LissenToServer);
_ServerMessageChannel.Subscribe(_FormFiber,(x)=>textBox1.Text = x);
}
private LissenToServer()
{
while(_AbortWork == false)
{
.... wait for server message
string mgs = ServerMessage();
_ServerMessageChannel.Publish(msg);
}
}
}
使用Retlang.Channels;
使用再生纤维;
使用Retlang.Core;
公共部分类FooForm:Form
{
PoolFiber _WorkFiber;//反向工作光纤
FormFiber _FormFiber;//这将封送消息到gui线程
通道_服务器消息通道;
bool\u AbortWork=false;
公共表格()
{
初始化组件();
_ServerMessageChannel=新频道();
_WorkFiber=新的PoolFiber();
_FormFiber=new _Fiber=new FormFiber(这个,new batch和singleexecutor());
_WorkFiber.Start();//开始接收消息
_FormFiber.Start();//开始接收消息
_WorkFiber.Enqueue(LissenToServer);
_订阅(_FormFiber,(x)=>textBox1.Text=x);
}
专用LissenToServer()
{
while(_AbortWork==false)
{
..等待服务器消息
字符串mgs=ServerMessage();
_ServerMessageChannel.Publish(msg);
}
}
}
我建议你研究一下retlang,它从根本上改变了我编写应用程序的方式。
快速而肮脏的示例,可能会也可能不会将lissens编译为某个服务器消息字符串,并将其显示在文本框中
using Retlang.Channels;
using Retlang.Fibers;
using Retlang.Core;
public partial class FooForm: Form
{
PoolFiber _WorkFiber; //backround work fiber
FormFiber _FormFiber; //this will marshal the messages to the gui thread
Channel<string> _ServerMessageChannel;
bool _AbortWork = false;
public FooForm()
{
InitializeComponent();
_ServerMessageChannel= new Channel<string>();
_WorkFiber = new PoolFiber();
_FormFiber = new _Fiber = new FormFiber(this,new BatchAndSingleExecutor());
_WorkFiber.Start(); //begin recive messages
_FormFiber .Start(); //begin recive messages
_WorkFiber.Enqueue(LissenToServer);
_ServerMessageChannel.Subscribe(_FormFiber,(x)=>textBox1.Text = x);
}
private LissenToServer()
{
while(_AbortWork == false)
{
.... wait for server message
string mgs = ServerMessage();
_ServerMessageChannel.Publish(msg);
}
}
}
使用Retlang.Channels;
使用再生纤维;
使用Retlang.Core;
公共部分类FooForm:Form
{
PoolFiber _WorkFiber;//反向工作光纤
FormFiber _FormFiber;//这将封送消息到gui线程
通道_服务器消息通道;
bool\u AbortWork=false;
公共表格()
{
初始化组件();
_ServerMessageChannel=新频道();
_WorkFiber=新的PoolFiber();
_FormFiber=new _Fiber=new FormFiber(这个,new batch和singleexecutor());
_WorkFiber.Start();//开始接收消息
_FormFiber.Start();//开始接收消息
_WorkFiber.Enqueue(LissenToServer);
_订阅(_FormFiber,(x)=>textBox1.Text=x);
}
专用LissenToServer()
{
while(_AbortWork==false)
{
..等待服务器消息
字符串mgs=ServerMessage();
_ServerMessageChannel.Publish(msg);
}
}
}