Tag: .net

SSH.NET不处理我的shell输入命令

我正在使用SSH.NET从C#中的控制台应用程序连接到我的Raspberry Pi。 我想从我自己的流中发送文本,通过StreamWriter写入它。 问题是它什么也没做。 这就像WriteLine(“ls”)不会产生任何影响。 这是代码: using System; using System.IO; using Renci.SshNet; namespace SSHTest { class Program { static void Main(string[] args) { var ssh = new SshClient(“raspberrypi”, 22, “pi”, “raspberry”); ssh.Connect(); var input = new MemoryStream(); var streamWriter = new StreamWriter(input) { AutoFlush = true }; var shell = ssh.CreateShell(input, Console.OpenStandardOutput(), new MemoryStream()); shell.Start(); […]

覆盖属性设置器和getter

有没有办法覆盖具有属性的auto属性的setter和getter? 像这样: [CustomAttribute] public int Value { get; set; } … public class CustomAttibute : Attribute { public override NotExistingPropertySetter(object value) { if (((int)value) < 10 ) { value = 10; } } }

WPF / C#不要阻止UI

我有一个现有的WPF应用程序,它有几个部分。 每个部分都是UserControl,它实现了一个接口。 该接口指定了两个方法: void LoadData([…])和bool UnloadData() 。 这些方法由UI线程调用,因此如果耗时,我们需要在后台工作中完成我们的工作。 LoadData没有问题,因为我们可以异步更新UI。 问题出在UnloadData()上。 如果我们真的可以离开当前视图,这应该返回。 这是使用当前数据状态(已保存/已修改/无效)计算的: 保存返回true, 无效询问您是否要保留一些正确的数据或不保存而离开 修改后告诉您可以取消更改(返回true),继续编辑(返回false),保存当前数据(返回true) 问题在于“修改 – >保存”。 这是一个耗时的方法,所以为了尊重应用程序的原理,我们应该在后台线程(带忙指示符)中运行它。 但是如果我们只是启动线程并转到下一部分,它将返回“true”到方法调用,我们将直接启动下一个视图。 在我的情况下,在保存本地数据之前加载下一个视图可能是个问题。 所以: 有没有办法在返回“true”之前等待后台线程完成,而不阻止UI? public bool UnloadData(){ if(…){ LaunchMyTimeConsumingMethodWithBackgroundWorker(); return true;//Only when my time consuming method ends } //[…] } 重要的编辑也许我不清楚:我知道如何使用BackgroundWorker或TPL。 我的问题是父类(调用UnloadData()的类是一个我无法编辑的类(由于多种原因:它在另一个不会重新加载的DLL中,它已经与70多个userControl一起工作,所有这些都在单独的项目(dll),由reflection加载。 这不是我的选择,我觉得它不好,但我现在要处理它。 我一直在寻找方法让我的方法等待返回我的方法。 我不确定是否有可能。 但我正在寻找一种解决方法,它将为我节省数周的工作量。

如何使用货币符号将字符串解析为十进制?

我不知道为什么这不起作用: string s = “12,00 €”; var germanCulture = CultureInfo.CreateSpecificCulture(“de-DE”); decimal d; if (decimal.TryParse(s, NumberStyles.AllowCurrencySymbol, germanCulture, out d)) { // i want to get to this point Console.WriteLine(“Decimal value: {0}”, d); }

锁定aqcuired并进一步尝试锁定不阻塞:C#锁是否重入?

我已经编写了一个测试,我认为应该是一个有效的死锁案例。 看来,一旦一个类的实例获取了lock ,该实例就不再需要重新获取lock ,即使我明确地尝试调用另一个应该再次lock方法。 这是class级: internal class Tester { private readonly object _sync = new object(); public Tester() { } public void TestLock() { lock (_sync) { for (int i = 0; i < 10; i++) { Deadlock(i); } } } private void Deadlock(int i) { lock (_sync) { Trace.WriteLine(i + " no deadlock!"); } […]

如何通过Printername和JobID暂停Win32_printJob

任务 当用户打印文档时,暂停弹出将出现然后填写表单单击输入表单将关闭并且作业已恢复。 我们有50台网络打印机 , 2000台客户机和一台打印服务器 。 每个客户有3或4台打印机 问题 如果用户使用网络打印机(CANON,HP)在本地打印文档(EX:PDF PRINTER,XPS DOCUMENT WRITER) (或) ,则打印作业立即停止。 我的尝试 当打印任何文件时,事件监听器正在观看并返回打印作业 。 在第一暂停方法有时工作,大部分时间不能正常工作。因为,它搜索printjob,但它没有已经打印。 在第二个暂停方法不起作用因为,事件侦听器返回Managementbaseobject但是如果要暂停打印作业需要ManagementObject 如何将ManageBaseObject转换为ManageObject PRINTJOB EVENT LISTENER CODE managementEvent = new ManagementEventWatcher(); managementEvent.Query = new EventQuery(“SELECT * FROM __InstanceCreationEvent WITHIN 0.1 WHERE TargetInstance ISA ‘Win32_PrintJob'”); managementEvent.Scope = new ManagementScope(@”\root\cimv2″); managementEvent.EventArrived += new EventArrivedEventHandler(printJobArrived_EventArrived); managementEvent.Start(); 主要行动守则 private void printJobArrived_EventArrived(object sender, […]

使用Attach方法无法更新数据库

我正在尝试学习LINQ to SQL。 我已经成功实现了insert方法,并且数据被插入到数据库中。 当我尝试更新现有数据时,即使没有exception,它也不会反映在数据库中。 你能否说一下可能出错的地方? 注意:AccountNumber是主键 编辑 以下代码行使其工作。 但是,你能解释为什么我们需要刷新吗? accountRepository.UpdateChangesByAttach(acc1); accountRepository.RefreshEntity(acc1); accountRepository.SubmitChanges(); 注意: DataContext.Refresh method refreshes object state by using data in the database. 刷新是使用KeepCurrentValues选项完成的。 据我所知,它将保留我在实体对象中更新的值。 我(仅)提供需要在数据库中更新的所需信息。 是否需要刷新才能获得剩余的列值? 客户 using (var context = new RepositoryLayer.LibraryManagementClassesDataContext(connectionstring)) { context.Log = Console.Out; RepositoryLayer.Repository selectedRepository = new RepositoryLayer.Repository(); //selectedRepository.Context = context; AccountBusiness accountBl = new AccountBusiness(selectedRepository); //Transaction 1 […]

使用C#.NET 3.5 WinForms进行部分透明化?

我正在制作一个.NET 3.5应用程序,其表单绘制部分透明的黑色背景。 我正在重写OnPaintBackground来实现这个目标: protected override void OnPaintBackground( PaintEventArgs e ) { using ( Brush brush = new SolidBrush( Color.FromArgb( 155, Color.Black ) ) ) { e.Graphics.FillRectangle( brush, e.ClipRectangle ); } } 它可以工作,但偶尔表格会在不清除屏幕的情况下自行绘制,使透明度比应有的更深。 我曾尝试使用Graphics.Flush()和Graphics.Clear() ,但它无法帮助或完全删除透明度。 有什么建议? 编辑:在左侧启动应用程序后,以及在右侧重新绘制表单几次(以响应从一个控件到另一个控件的选项卡)后,它的外观如下: 透明度问题http://www.quicksnapper.com/files/5085/17725729384A10347269148_m.png 编辑2:我今天早上尝试了一些事情并注意到当透明部分后面的桌面发生变化时,实际上并没有重新绘制。 例如,如果我打开任务管理器并将其放在窗口后面,您就不会看到它自己刷新。 这与我在透明度水平上所看到的一样有道理。 是否有一个function可以让Windows重绘窗口后面的区域? 编辑3:我尝试更改窗体上的一些属性,但它们都导致窗体绘制非透明黑色: this.AllowTransparency = true; this.DoubleBuffered = true; this.Opacity = .99; 我将尝试为透明部分创建一个单独的窗口,如上所述,但仍然欢迎任何其他想法。

Monitor.Enter和Monitor.Exit在不同的线程中

Monitor.Enter和Monitor.Exit旨在从同一个线程调用。 但是,如果我需要在一个不同于获得的线程中释放锁定怎么办? 例如:存在使用此资源的共享资源和异步操作。 操作从BeginOperation开始,并获取共享资源上的锁定。 还有释放锁的EndOperation方法。 EndOperation通常在回调的另一个线程中调用,因此我无法在EndOperation方法中调用Monitor.Exit 。 在这种情况下,最好的方法是什么? 用AutoResetEvent而不是Monitor来仔细检查锁定是一个很好的解决方案吗?

c#7.0中的表达式获取/设置访问器function

我在课堂上有这个代码 private string test; public string Test { get => test; set => test = value; } 但编译器不会让我编译。 它说 CS1043 { or ; expected CS1513 } expected 我正在使用VS 2017并使用MVC 5项目定位.NET FW 4.6 知道为什么它不起作用吗?