2014年2月1日星期六

C#多线程简单例子 - lzhdim

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
C#多线程简单例子 - lzhdim  阅读原文»

前面做一个短信的项目,所以写了个简单的C#多线程的例子(见http://www.cnblogs.com/lzhdim/archive/2011/03/10/1980028.html)。今天闲来无事,将该代码翻出来进行下说明,仅做留念。前面也写过一个关于C#多线程书籍的读书感受(见http://www.cnblogs.com/lzhdim/archive/2009/11/27/1611510.html),大家共勉。

1、 打开VS2010项目。

该DEMO项目很简单。

1.1 Program类

1.2 App.config配置文件

1.3 一个窗体

2、 下面看代码。

2.1 启动线程

2.2 线程池。

2.3 初始化线程

2.4 线程主要处理的事情

这里用了一个变量bRun来对线程进行判断是否运行处理。这里没有进行锁的处理。

上面用一个例子介绍了C#多线程的情况。例子很简单,因为VS的发展,C#多线程的代码也变得简单了,没有使用Moniter等进行处理,仅用一个变量进行了判断,同样没有使用锁机制进行管理。我记得VS2003和VS2005的线程处理机制有不少的函数进行处理,比如线程中断supend等,而在后续的VS中就无法使用了。本文仅做参考,祝大家春节快乐。


本文链接:http://www.cnblogs.com/lzhdim/p/3537081.html,转载请注明。

为jQuery添加Webkit的触摸方法支持 - Luo Indream  阅读原文»

前些日子收到邮件,之前兼职的一个项目被转给了其他人,跟进的人来问我相关代码的版权问题。

我就呵呵了。

这段代码是我在做13年一份兼职的时候无聊加上去的,为jQuery添加触摸事件的支持。因为做得有点无聊,所以就帮客户添加了用响应式网页+JS touch兼容了移动设备,主要是Webkit的移动设备。

这里就分享下我的实现。

先贴上代码:

//Published by Indream Luo
//
Contact: indreamluo@qq.com
//
Version: Chinese 1.0.0

!function ($) {
window.indream
= window.indream || {};
$.indream
= indream;

//Define events
indream.touch = {
evenList: {
touchStart: {
htmlEvent:
'touchstart'
},
touchMove: {
htmlEvent:
'touchmove'
},
touchEnd: {
htmlEvent:
'touchend'
},
tapOrClick: {
eventFunction:
function (action) {
$(
this).each(function () {
(
function (hasTouched) {
$(
this).touchEnd(function (e) {
hasTouched
= true;
action.call(
this, e);
});
$(
this).click(function (e) {
if (!hasTouched) {
action.call(
this, e);
}
});
}).call(
this, false);
});

return this;
}
},
moveOrScroll: {
eventFunction:
function (action) {
$(
this).each(function () {
(
function (hasTouched) {
$(
this).touchMove(function (e) {
hasTouched
= true;
action.call(
this, e);
});
$(
this).scroll(function (e) {
if (!hasTouched) {
action.call(
this, e);
}
});
}).call(
this, false);
});

return this;
}
}
}
}

//Add events into jquery
for (var eventName in indream.touch.evenList) {
var event = indream.touch.evenList[eventName];
$.fn[eventName]
= event.eventFunction || (function (eventName, htmlEvent) {
return function (action) {
$(
this).each(function () {
$(
this).bind(htmlEvent, action);
//Add event listener method for IE or others
if (this.attachEvent) {
this.attachEvent('on' + htmlEvent, function (e) {
$(
this).on(eventName);
});
}
else {
this.addEventListener(htmlEvent, function (e) {
$(
this).on(eventName);
});
}
});

return this;
}
})(eventName, event.htmlEvent);
}
}(window.jQuery);

网上能找到很多关于Touch事件的相关信息,所以我就不详细说明了,可以解释得简单一点。

触摸事件代替鼠标事件

在Webkit移动设备上,触摸操控首先会触发触摸事件,在0.5秒后才会触摸鼠标事件。

个人觉得这在设计上可以理解。先满足于触摸操控的需求,然后再向“下”兼容鼠标事件,以满足原有面向桌面网页的使用。

所有的事件大致执行顺序是:touchstart->touchmove->touchend->0.5s->鼠标事件mouseover/scroll/click等

按照webkit移动浏览器的设计,一般开发时候按照桌面网页开发,然后移动设备上使用是没问题的。不过桌面上大量使用的hover类效果时常会因为触摸把mouse事件+click事件触发个遍而悲剧;0.5秒的延迟也对用户体验造成了大伤害。

所以我添加了tapOrClick事件,用途就是替代click事件,并且灭了那0.5秒。

滚动锁定

在用户使用触摸设备进行滚动,而触摸已经停止的时候,浏览器会锁定整个页面,暂停所有UI资源占用,而把大部分资源留给内核进行滚动。同样的情况还会发生在放大缩小页面内容,甚至更甚。

因为要加个滚动渐变的特效,所以我添加了moveOrScroll事件,在滑动的时候执行滚动中应该执行的效果。

当然,这里还是不完美的,因为手指一旦离开屏幕(触摸事件停止),页面自由滚动的这段时间,js也会被freeze。这只是没有办法中的办法而已。

滚动锁定还会导致另一个问题就是:滚动有三种,分别是上下、左右、自由。

用一下触摸设备就会发现,如果从触摸开始被判定是上下滚动,那么触摸时再怎么左右滑动都不会有左右滑动的效果,除非放开重来。同样的情况也会发生在一开始为左右滚动。自由滚动的话需要一开始就进行斜向滚动。

在这个时候如果需要加入特定事件的话,需要注意事件的判断。在jQuery的事件回调参数中,假设参数名为e,那么一般用:

e.originalEvent.touches[0].pageX

可以判断触摸情况。开发时需要自行记录触摸事件的情况再作判断。

原生最优

请尽量不要尝试用大量的JS方法触发来实现一些本身没有的样式效果。

比如元素静态不动,理应用position:fix;来实现,但许多开发人员会是用js不断刷新其控件位置来解决。

这种实现方式放在触摸设备上,一般只会出现两种情况:

  1. 卡死你
  2. 页面被冻结,冻结技术后突然发现事件全部执行完了(原因如上,浏览器会集中UI线程的资源给内核优先)

一般移

阅读更多内容

没有评论:

发表评论