Articles of .net

如何用C#.NET编写程序,在Linux / Wine / Mono上运行它们?

在这种特殊情况下,我需要为Linux运行复杂的.NET应用程序。 复杂的我的意思是 – 这个项目开发了3年,我不想再写在Java或其他东西,开发和支持,以后的.NET和Java版本。 应用程序正在生成鼠标和键盘事件(通过winapi / dll导入)并使用串行端口。 我也有几个计时器延迟 – 串口通信(10-20ms,我不需要很大的精度)。 其余的只是很多简单的代码,没有什么特别的,没有奇怪的控制,没有directx等 我应该期待什么? 这会工作吗? 如果代码的某些部分会失败 – 我可以稍微改变一下,在.net应用程序和Linux上的迷你应用程序之间build立networking连接,我可以编写发送鼠标和键盘事件或RS232通信。 另外我想问一下Wine和.NET: 如何编写应该在Linux / Wine / Mono上运行的.NET应用程序? 哪个版本的框架? (1.x,2.0还是可以使用3.5?) 我应该避免(从Windows dll?定时器导入?) 编辑/从评论移动: 几年前我看到了单声道,但是很糟糕。 现在我看到它成长起来,支持LINQ,线程和其他复杂的function。 另外现在的帮助看起来非常严重。 我还没有接受答案,因为我看到人们仍然张贴非常有用的链接。 如果这个问题得到很多+1,我会重写它,也许这会帮助别人。 我希望这里的人有一些Linux上的.NET的实践经验…

如何使用mono将.NET Windows Service应用程序迁移到Linux?

使用mono将.NET Windows服务迁移到Linux最好的方法是什么? 我一直在试图避免执行该应用程序作为预定的命令。 是否有可能获得一个服务/系统守护进程(在Linux中)的行为?

得到所有打开的窗口的标题

如何检索所有打开的窗口的标题(包括Internet Explorer中的选项卡等窗口)?

最佳文件缓冲区读取大小?

我正在写一个需要阅读相当大的文件的应用程序。 我一直想知道现代Windows XP计算机上读取缓冲区的最佳大小。 我search了一下,发现了很多例子,其中最佳尺寸为1024。 这里是我的意思的片段: long pointer = 0; buffer = new byte[1024]; // What's a good size here ? while (pointer < input.Length) { pointer += input.Read(buffer, 0, buffer.Length); } 我的应用程序相当简单,所以我不想写任何基准代码,但想知道什么尺寸是常见的?

我可以通过.Net获得与安装的打印机相关的图标吗?

我知道如何获得所有已安装的打印机在.Net机器上的列表: foreach (String printer in PrinterSettings.InstalledPrinters) { Console.WriteLine(printer.ToString()); } Console.ReadLine(); InstalledPrinters只是一个string列表。 有没有办法让安装的打印机对象同时包含我通常在Windows资源pipe理器中的“设备和打印机”下看到的名称和图标图像?

.NET Charting图例标记大小

我正在.NET Windows窗体项目上使用DataVisualizations Charting控件。 我遇到的问题是,当我打印图表时,图例并没有显示系列标记(实际上它是一种显示,但它看起来像线上较暗的像素)。 当在表单上查看图表时,标记是可见的,尽pipe它们不是很大,并且与系列的MarkerSize值相比似乎没有改变。 但是当图表打印时(在纸上或PDF上),标记不在那里。 此图显示了在表单上查看图表的视图。 正如你所看到的,图例标记是可见的,但仍然没有接近实际系列标记的位置。 该图显示了同一图表的PDF版本。 如果你眯起眼睛,你可以在图例中心看到较暗的像素。 如何修复图例标记,以便在印刷时实际显示并使其变大?

ManagedThreadID和操作系统ThreadID之间的关系

我正在研究一个multithreading的C#Windows应用程序,这个应用程序会频繁调用本地dll。 这些阻止有时可能持续相当长时间的电话。 在某些情况下,我想从主线程中取消一些工作线程的阻塞调用。我使用的本地API提供了一个用于此目的的函数: HRESULT CancelBlockingCall(DWORD ThreadID) 虽然CancelBlockingCall()的文档不是很清楚,但我相信我需要传递阻塞在调用上的OS级线程的ThreadID。 根据我从CancelBlockingCall()得到的返回码,我意识到Thread.ManagedThreadID不是我所需要的。 我在msdn上find了以下内容(请参阅注释) : 操作系统ThreadId与托pipe线程没有固定关系,因为非托pipe主机可以控制托pipe线程和非托pipe线程之间的关系。 具体而言,复杂的主机可以使用CLR Hosting API来针对相同的操作系统线程调度多个托pipe线程,或者在不同的操作系统线程之间移动托pipe线程。 这是否意味着我没有办法正确调用一个托pipe线程的CancelBlockingCall()? 是否无法确定托pipe线程当前正在执行的操作系统级线程的线程ID?

鼠标hover事件上的Hightlight Listbox项目

我试图改变一个listview项目的背景颜色时,鼠标hover在它 我有一个鼠标hover事件,但是如何在鼠标hover在项目上时添加“突出显示”效果? private void pinnedAppsListBox_MouseHover(object sender, EventArgs e) { }

用多个视图构buildC#.NET窗口应用程序

我正在重写一个旧的应用程序,并将其作为尝试C#和.NET开发的好机会(我通常在C中做了很多插件)。 应用程序基本上是一个收集数据的计时器 它有一个开始视图和一个button来开始测量。 在测量过程中,根据用户想要查看的信息,该应用程序有五个不同的视图。 切换视图的最佳做法是什么? 从开始运行? 在运行视图之间? 思路: 使用一个表单并隐藏并显示控件 使用一个开始窗体,然后使用TabControl的窗体 使用六个单独的表格

计算Windows进程的CPU使用率?

给定一个进程ID,我怎样才能从这个进程的C#加载CPU的负载? 我已经尝试使用PerformanceCounter在c#中所述计算特定应用程序的CPU使用率 我还尝试在一个时间范围内手动取得进程的总CPU时间的两个值,并将delta-cpu-time与delta-total-time分开。 这两种方法似乎一开始工作正常,但如果我把我的应用程序旁边的Windows任务pipe理器我的应用程序总是显示约两倍的任务pipe理器。 我试图用10ms到10sec的各种时间步长进行更新,并一直得到相同的结果。 嗯,当我写这个时,意识到这可能是某种双核问题。