最近我一直在做一个简单的屏幕共享程序.
实际上,该程序可以TCP protocol使用桌面复制API - 一种很酷的服务,支持非常快速的屏幕捕获,还提供有关MovedRegions(仅改变其在屏幕上的位置但仍然存在的UpdatedRegions区域)和(更改区域)的信息.
桌面复制有2个重要属性 - 2个字节数组,一个数组previouspixels和一个NewPixels数组.每4个字节代表RGBA形式的一个像素,例如,如果我的屏幕是1920 x 1080,则缓冲区大小为1920 x 1080*4.
以下是我的策略的重要亮点
从现在开始,我遍历UpdatedRegions(它是一个矩形数组),我发送区域边界和Xo'r像素,如下所示:
writer.Position = 0;
var n = frame._newPixels;
var w = 1920 * 4; //frame boundaries.
var p = frame._previousPixels;
foreach (var region in frame.UpdatedRegions)
{
writer.WriteInt(region.Top);
writer.WriteInt(region.Height);
writer.WriteInt(region.Left);
writer.WriteInt(region.Width);
for (int y = region.Top, yOffset = y * w; y < region.Bottom; y++, yOffset += w) …Run Code Online (Sandbox Code Playgroud)我有一个访问数据库的应用程序,必须根据输入按不同的字段排序结果.
这是我的排序功能:
IQueryable<Entity> GetSortedData(IQueryable<Entity> result, String orderby, bool desc)
{
switch (orderby.ToLower())
{
case "id":
result = result.OrderBy(c => c.Id);
break;
case "code":
result = result.OrderBy(c => c.Code);
break;
case "active":
result = result.OrderBy(c => c.Active);
break;
default:
result = result.OrderBy(c => c.Name);
break;
}
if (pageData.SortDesc)
{
var res = result.ToList();
res.Reverse();
return res.AsQueryable();
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
这段代码存在一些我不喜欢的问题:
重复的代码太多了.如果它是"纯粹的SQL"查询,它看起来像
SELECT*FROM data_table ORDER BY CASE @OrderBy WHEN'id'Then id when'code'THEN code WHEN'active'THEN
active ELSE name
END;
转换为列表并返回以进行反转.我不能改变返回值类型,我绝对不想写更无用的代码(基本上是翻倍switch …
以下代码演示了如何使用 sleep() 方法使线程暂停一段特定的时间。
当我运行此代码时:-
class Program
{
class ThreadCreationProgram
{
public static void CallToChildThread()
{
Console.WriteLine("Child thread starts");
// the thread is paused for 5000 milliseconds
int sleepfor = 5000;
Console.WriteLine("Child Thread Paused for {0} seconds");
Thread.Sleep(sleepfor);
Console.WriteLine("Child thread resumes");
}
static void Main(string[] args)
{
ThreadStart childref = new ThreadStart(CallToChildThread);
Console.WriteLine("In Main: Creating the Child thread");
Thread childThread = new Thread(childref);
childThread.Start();
Console.ReadKey();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我得到这个输出-
In Main: Creating the child thread
Child thread starts
Child thread paused …Run Code Online (Sandbox Code Playgroud)