wpf socket通讯 线程怎么关闭

kerryjiang-supersocket-master 通信 高效的 支持各种心跳,守护线程 CSharp C#编程 256万源代码下载-
&文件名称: kerryjiang-supersocket-master& & [
& & & & &&]
&&所属分类:
&&开发工具: C#
&&文件大小: 10386 KB
&&上传时间:
&&下载次数: 0
&&提 供 者:
&详细说明:socket 通信 高效的通信 支持各种心跳,守护线程-socket supersocket
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&supersocket&&...........\.gitignore&&...........\.travis.yml&&...........\Agent&&...........\.....\ManagedAppAgent.cs&&...........\.....\Program.cs&&...........\.....\Properties&&...........\.....\..........\AssemblyInfo.cs&&...........\Build.bat&&...........\BuildQuickStart.bat&&...........\BuildServerManager.bat&&...........\BuildWithSignature.bat&&...........\Common&&...........\......\AssemblyUtil.cs&&...........\......\ConfigurationElementBase.cs&&...........\......\ConfigurationExtension.cs&&...........\......\DictionaryExtension.cs&&...........\......\ErrorEventArgs.cs&&...........\......\GenericConfigurationElementCollection.cs&&...........\......\Platform.cs&&...........\......\Properties&&...........\......\..........\AssemblyInfo.cs&&...........\......\SocketEx.cs&&...........\......\StringExtension.cs&&...........\......\TheadPoolEx.cs&&...........\Dlr&&...........\...\DynamicCommand.cs&&...........\...\DynamicCommandLoader.cs&&...........\...\DynamicCommandLoaderBase.cs&&...........\...\FileScriptSource.cs&&...........\...\IScriptSource.cs&&...........\...\Properties&&...........\...\..........\AssemblyInfo.cs&&...........\...\ScriptSourceBase.cs&&...........\Facility&&...........\........\PolicyServer&&...........\........\............\FlashPolicyServer.cs&&...........\........\............\PolicyReceiveFilter.cs&&...........\........\............\PolicyReceiveFilterFactory.cs&&...........\........\............\PolicyServer.cs&&...........\........\............\PolicySession.cs&&...........\........\............\SilverlightPolicyServer.cs&&...........\........\Properties&&...........\........\..........\AssemblyInfo.cs&&...........\LICENSE&&...........\Management&&...........\..........\AgentClient.SL5&&...........\..........\...............\App.xaml&&...........\..........\...............\App.xaml.cs&&...........\..........\...............\Behaviors&&...........\..........\...............\.........\SelectRowOnRightClickBehavior.cs&&...........\..........\...............\MainPage.xaml&&...........\..........\...............\MainPage.xaml.cs&&...........\..........\...............\NodeTemplates.xaml&&...........\..........\...............\Properties&&...........\..........\...............\..........\AppManifest.xml&&...........\..........\...............\..........\AssemblyInfo.cs&&...........\..........\...............\..........\InBrowserSettings.xml&&...........\..........\...............\..........\OutOfBrowserSettings.xml&&...........\..........\...............\SuperSocket.ServerManager.Client.SL5.csproj&&...........\..........\...............\Themes&&...........\..........\...............\......\Default&&...........\..........\...............\......\.......\Grid.xaml&&...........\..........\...............\......\.......\Skin.xaml&&...........\..........\...............\Tuple.cs&&...........\..........\...............\ViewModel&&...........\..........\...............\.........\NodeMasterViewModel.SL.cs&&...........\..........\AgentClient.WPF&&...........\..........\...............\AgentWebSocket.cs&&...........\..........\...............\App.xaml&&...........\..........\...............\App.xaml.cs&&...........\..........\...............\Behaviors&&...........\..........\...............\.........\ContextMenuBehavior.cs&&...........\..........\...............\Command&&...........\..........\...............\.......\DelegateCommand.cs&&...........\..........\...............\.......\GenericDelegateCommand.cs&&...........\..........\...............\Config&&...........\..........\...............\......\AgentConfig.cs&&...........\..........\...............\......\NodeConfig.cs&&...........\..........\...............\ConfigPanel.xaml&&...........\..........\...............\ConfigPanel.xaml.cs&&...........\..........\...............\Controls&&...........\..........\...............\........\CircleProgressBar.xaml&&...........\..........\...............\........\CircleProgressBar.xaml.cs&&...........\..........\...............\........\PasswordHelper.cs&&...........\..........\...............\Converters&&...........\..........\...............\..........\DebugConverter.cs&&...........\..........\...............\..........\IsNullConverter.cs&&...........\..........\...............\..........\NodeStateVisibilityConverter.cs&&...........\..........\...............\..........\ToStringConverter.cs&&...........\..........\...............\Extensions.cs&&...........\..........\...............\MainPanel.xaml&&...........\..........\...............\MainPanel.xaml.cs&&...........\..........\...............\MainWindow.xaml&&...........\..........\...............\MainWindow.xaml.cs&&...........\..........\...............\NodeHeader.xaml&&...........\..........\...............\NodeHeader.xaml.cs&&...........\..........\...............\NodeInfo.xaml&&...........\..........\...............\NodeInfo.xaml.cs&&...........\..........\...............\NodeTemplates.xaml
&输入关键字,在本站256万海量源码库中尽情搜索:西西软件下载最安全的下载网站、值得信赖的软件下载站!
→ Socket Server连接客服端的简单实现
类型:服务器区大小:21KB语言:中文 评分:6.6
第 5 页 监听线程的实现五、监听线程的实现
监听线程需要有一个MySocketServer来监听客户端的连接,每当形成一个新的连接,查看是否超过设置的最大连接数,如果超过则关闭连接,如果未超过设置的最大连接数,则形成一个新的MyConnection,将其加入连接池和线程池。
MySocketServer *pServer = new MySocketServer(port);
MyConnectionPool *pPool = new MyConnectionPool();
while (!stopFlag)
MySocket * sock = pServer-&acceptConnection(5);
if(sock != null)
if(m_connections.size & maxConnectionSize)
sock.close();
MyTask *pTask = new MyConnection();
pPool-&addConnection(pTask);
第5页: 监听线程的实现
04-0703-0812-2311-2510-1801-2201-2101-1701-1201-12
阅读本文后您有什么感想? 已有23人给出评价!
名称大小下载&&国之画&&&&&&
&& &&&&&&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!Socket编程,无法访问已释放的对象错误,求帮忙
[问题点数:100分,结帖人rsd102]
Socket编程,无法访问已释放的对象错误,求帮忙
[问题点数:100分,结帖人rsd102]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2015年3月 .NET技术大版内专家分月排行榜第三2015年2月 .NET技术大版内专家分月排行榜第三
2015年3月 .NET技术大版内专家分月排行榜第三2015年2月 .NET技术大版内专家分月排行榜第三
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。WPF MVVM模式下的无阻塞刷新探讨 - 即使很偶然 - 推酷
WPF MVVM模式下的无阻塞刷新探讨 - 即使很偶然
很多时候我们需要做一个工作,在一个方法体里面,读取大数据绑定到UI界面,由于长时间的读取,读取独占了线程域,导致界面一直处于假死状态。例如,当应用程序开始读取Web资源时,读取的时效是由网络链路的速度决定的,那么在读取的过程中整个程序都必然处于一种等待状态,这不是我们想要看到的。那么我们有没有一种机制既能解决效率问题同时可以提供代码的可用性呢?有人可能会说,我们可以使用线程池。线程真的是万能的吗?当处理大并发数据量时就能说明这个问题,线程池最大的并发量有限制,而且线程是极度占用资源。
.NET 4.5下提供了一种异步方式,能够有效的避免效率瓶颈并增强应用程序的可维护性,这种机制类似于Node.js原理,这是一个完全单线程的方法,当有数据传递过程时,它首先把数据交给异步处理,再完成后再通过回调返回数据集,我们可以理解为c#版的闭包。它的最大作用是把原来的等待换成异步方式,把UI解放出来,因为UI的活动都是共用一个域的。
先看看传统模式下的无阻塞刷新,首先是XAML页面文件
&Grid.RowDefinitions&
&RowDefinition Height=&*&&&/RowDefinition&
&RowDefinition Height=&30&&&/RowDefinition&
&/Grid.RowDefinitions&
Grid.Row=&0&
Width=&auto& Height=&auto& Name=&lvData& HorizontalAlignment=&Stretch& VerticalAlignment=&Stretch&&
&ListView.View&
&GridView&
&GridViewColumn Header=&编号& DisplayMemberBinding=&{Binding Path=Id}&
Width=&100& /&
&GridViewColumn Header=&随机数& DisplayMemberBinding=&{Binding Path=Code}& Width=&160&/&
&/GridView&
&/ListView.View&
&/ListView&
再新建一个ViewModel类,这个类的作用是为我们的MVVM模式提供一个数据源
public class RandomViewModel
public RandomViewModel()
Model = new ObservableCollection&RandomData&();
public ObservableCollection&RandomData& M
public List&RandomData& dataL
void FillData()
Model.Clear();
for (int i = 0; i & dataList.C i++)
Model.Add(dataList[i]);
public void
dataList = new List&RandomData&();
Random random = new Random();
for (int i = 0; i & 20000; i++)
dataList.Add(new RandomData()
Code = random.NextDouble()
public class RandomData
public int Id { get; set; }
public double Code { get; set; }
传统模式下的无刷新调用,先在线程内部计算出需要绑定的数据,然后再使用Invoke填充Model.
Thread thread = new Thread(p =&
while (true)
ViewModel.GetData();
this.Dispatcher.Invoke(new Action&List&RandomData&&(result =&
ViewModel.FillData();
}), ViewModel.dataList);
Thread.Sleep(4000);
thread.IsBackground = true;
thread.Start();
在代码中嵌入线程函数,代码是很分散的,同时也消耗大量资源。为了让我们代码尽可能的做到内外同步执行。我们使用async、await、Task
private async Task AsyncAccess()
while (true)
var getDataListTask = new Task(() =&
Thread.Sleep(5000);
ViewModel.GetData();
getDataListTask.Start();
await getDataListT
var fillModelTask = Task.Factory.StartNew(() =&
ViewModel.FillData();
}, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.FromCurrentSynchronizationContext());
await fillModelT
理论上说,Task.Factory.StartNew也是在线程池上执行,可表示异步操作而且更加通用,其中在Task前加上await使用成为异步函数,不然UI界面仍会有卡顿的现象。
最后一个Invoke方法,需要通过SynchronizationContext.SetSynchronizationContext方法在多线程环境下设置SynchronizationContext.Current属性,将线程控制域转交至UI,设置当前SynchronizationContext相关的TaskScheduler,利用这个TaskScheduler,Task将通过当前SynchronizationContext来执行,实际上上述代码在WPF下等效于调用Dispatcher.BeginInvoke方法。
.net 4.5下已默认封装的相关类库有
HttpClient&,&SyndicationClient
StorageFile,&StreamWriter,&StreamReader,XmlReader
MediaCapture,&BitmapEncoder,&BitmapDecoder
WCF程序开发
Synchronous and Asynchronous Operations
使用sockets
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致

我要回帖

更多关于 wpf 多线程 的文章

 

随机推荐