每行阅读PDF

如何使用iText5 for .NET line by line阅读PDF文件? 我通过互联网搜索,但我只发现每页内容阅读PDF文件。 请看下面的代码。 public string ReadPdfFile(object Filename) { string strText = string.Empty; try { PdfReader reader = new PdfReader((string)Filename); for (int page = 1; page <= reader.NumberOfPages; page++) { ITextExtractionStrategy its = new iTextSharp.text.pdf.parser.SimpleTextExtractionStrategy(); String s = PdfTextExtractor.GetTextFromPage(reader, page, its); s = Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(s))); strText = strText + s; […]

如何防止窗口标题栏上的“无响应”消息?

我使用VS2010和C#来构建桌面应用程序。 此应用程序有一个表单,其中包含大量任务,需要花费大量时间才能完成。 当这个表单初始化时,它完美地工作,除了它在标题栏上显示“Not Responding” ,如图所示: 完成所有任务后,它会显示所需的输出。 为什么显示此消息,如何防止它?

最小化/恢复窗口时是否可以禁用动画?

当我单击Windows窗体应用程序中的最小化按钮时,我不希望它执行经典的Windows最小化动画(窗口转到任务栏)。 据我所知,没有Minimize事件,我可以使用Resize,但我不知道如何检测我是否点击了最小化按钮。 我尝试使用if ( WindowState = FormWindowState.Minimized ) { … } ,但无论如何都会动画并在之后触发代码。 有没有办法检测最小化按钮点击? 有没有办法禁用动画或是由Windows设置触发?

防止所有者垃圾收集的线程

在我创建的库中,我有一个类DataPort,它实现类似于.NET SerialPort类的function。 它与某些硬件进行通信,并且只要数据通过该硬件进入就会引发事件。 为了实现此行为,DataPort会旋转一个预期与DataPort对象具有相同生命周期的线程。 问题是当DataPort超出范围时,它永远不会被垃圾收集 现在,因为DataPort与硬件(使用pInvoke)对话并拥有一些非托管资源,所以它实现了IDisposable。 当您在对象上调用Dispose时,一切都正常。 DataPort摆脱了所有非托管资源并杀死了工作线程并消失了。 但是,如果您只是让DataPort超出范围,垃圾收集器将永远不会调用终结器,并且DataPort将永远保留在内存中。 我知道这种情况有两个原因: 终结器中的断点永远不会被击中 SOS.dll告诉我DataPort仍然存在 补充:在我们继续前进之前,我会说是的,我知道答案是“Call Dispose()Dummy!” 但我认为,即使你让所有引用超出范围, 最终应该发生正确的事情,垃圾收集器应该摆脱DataPort 回到问题:使用SOS.dll,我可以看到我的DataPort没有被垃圾回收的原因是因为它旋转的线程仍然具有对DataPort对象的引用 – 通过隐含的“this”参数线程正在运行的实例方法。 正在运行的工作线程不会被垃圾回收 ,因此在正在运行的工作线程范围内的任何引用也不符合垃圾回收的条件。 线程本身基本上运行以下代码: public void WorkerThreadMethod(object unused) { ManualResetEvent dataReady = pInvoke_SubcribeToEvent(this.nativeHardwareHandle); for(;;) { //Wait here until we have data, or we got a signal to terminate the thread because we’re being disposed int signalIndex = […]

如何使用变量更改sql登录密码

我正在尝试使用Alter LOGIN更新现有SQL登录的密码 我知道以下工作 ALTER LOGIN [username1] WITH PASSWORD = ‘somenewpassword123’; 但是当我尝试使用局部变量时 DECLARE @newpass nvarchar(max); SET @newpass = ‘P@ssw0rd12345’; ALTER LOGIN [username1] WITH PASSWORD = @newpass; 这失败了。 向变量添加[]大括号似乎在SSMS查询编辑器中解决了这个问题,但是在C#中使用此编程方式写出查询它失败,因为上述语句具有相同的错误(PASSWORD语法错误) c#app中的代码 public static int UpdateSqlLoginPassword(DbContext context, string loginName, string password) { try { string updatePassword = @” SET NOCOUNT ON DECLARE @loginName AS nvarchar(max) = {0} DECLARE @password […]

在C#中使用Lambda的UnHooking事件#

我经常遇到想要订阅事件的情况,但我想使用lambda这样做: public class Observable { public event EventHandler SomethingHappened; public void DoSomething() { // Do Something… OnSomethingHappened(); } } // Somewhere else, I hook the event observable.SomethingHappened += (sender, args) => Console.WriteLine(“Something Happened”); 我遇到的问题是我不知道如何取消事件。 由于lambda在引擎盖下创建了一个匿名委托,我没有什么可以调用的-= on。 现在,我可以创建一个方法: private void SomethingHappened(object sender, EventArgs args) { Console.WriteLine(“Something Happened”); } 然后我可以挂钩/取消所有我想要的东西: observable.SomethingHappened += SomethingHappened; observable.SomethingHappened -= SomethingHappened; 但我真的非常非常喜欢使用我的lambda。 […]

XmlSerializer忽略WebApi中的

我有一个返回一个简单对象的WebApi,但当我强制它以XML格式返回( Accept: application/xml )时,它忽略了我在对象上设置的[XmlAttribute]属性。 这是我的目标: public class Foo { [XmlAttribute] public string Bar { get; set; } } 我在代码中将其返回: [RoutePrefix(“api/mytest”)] public class MyTestController : System.Web.Http.ApiController { [HttpGet] [Route(“gettest”)] public Foo GetTest() { return new Foo() { Bar = “foobar” }; } } 生成的XML是: foobar 而我希望它会像这样返回: 为什么WebApi使用的XmlSerializer忽略[XmlAttribute]属性,如何让它像我想的那样工作?

如何使用MS Open XML SDK从.pptx文件中检索图像?

我开始尝试使用Open XML SDK 2.0 for Microsoft Office 。 我现在能够做某些事情,例如检索每张幻灯片中的所有文本,并获得演示文稿的大小。 例如,我这样做: using (var doc = PresentationDocument.Open(pptx_filename, false)) { var presentation = doc.PresentationPart.Presentation; Debug.Print(“width: ” + (presentation.SlideSize.Cx / 9525.0).ToString()); Debug.Print(“height: ” + (presentation.SlideSize.Cy / 9525.0).ToString()); } 现在我想在给定的幻灯片中检索嵌入的图像。 有谁知道如何做到这一点或者可以指向我关于这个主题的一些文档?

x:UWP中缺少类型 – 如何覆盖基本控件样式?

在WPF中,我使用以下代码覆盖基本控件样式: 在UWP中, x:Type XAMl中的x:Type消失了。 那么如何在UWP中完成上述代码呢? 谢谢。

c#的ObservableDictionary

我正在尝试使用ObservableDictionary的以下实现: ObservableDictionary(C#) 。 当我将字典绑定到DataGrid时使用以下代码: ObserveableDictionary dd=new ObserveableDictionary(); …. dd[“aa”]=”bb”; …. dd[“aa”]=”cc”; at dd[“aa”]=”cc”; 我得到了以下exception Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index 在以下方法中, CollectionChanged(this, new NotifyCollectionChangedEventArgs(action, newItem, oldItem)中抛出此exception: private void OnCollectionChanged(NotifyCollectionChangedAction action, KeyValuePair newItem, KeyValuePair oldItem) { OnPropertyChanged(); if (CollectionChanged != null) CollectionChanged(this, new […]