C# C中的多线程WinForms#

C# C中的多线程WinForms#,c#,winforms,C#,Winforms,任何人都可以在C#中为多线程Windows窗体检索书籍或其他联机资源吗? 我最感兴趣的是了解有关此主题的更多信息,特别是在GUI应用程序的上下文中,该应用程序在后台发送消息并侦听服务器的响应 非常感谢,, MK我不知道是否有关于WinForms和多线程的专门书籍。有一些书讨论了.NET异步编程模型,该模型在WinForms和WPF编程中被大量使用 朱瓦尔·洛维(OReilly出版社)和杰弗里·里克特(微软出版社)的尝试。这应该让你开始学习。我不知道是否有关于WinForms和多线程的专门书籍。有

任何人都可以在C#中为多线程Windows窗体检索书籍或其他联机资源吗? 我最感兴趣的是了解有关此主题的更多信息,特别是在GUI应用程序的上下文中,该应用程序在后台发送消息并侦听服务器的响应

非常感谢,,
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);
}
}
}