Tag: C#的

如何在C ++中实现big int

我想在C ++中实现一个大的int类作为编程练习 – 一个可以处理大于long int的数字的类。 我知道已经有几个开源的实现,但我想写我自己的。 我试图感受一下正确的方法是什么。 我明白,一般的策略是把数字作为一个字符串,然后将其分解成更小的数字(例如单个数字),并将它们放在一个数组中。 在这一点上,实现各种比较操作符应该相对简单。 我主要关心的是如何实现像加法和乘法这样的事情。 我正在寻找一个一般的方法和建议,而不是实际的工作代码。

在GDI +,JPEG Image到MemoryStream中发生一般性错误

这似乎是一个臭名昭着的错误在整个网络上。 因为我的情况不适合,所以我一直无法找到我的问题的答案。 将图像保存到流中时引发异常。 奇怪的是,这与PNG完美的作品,但给出了上述错误与JPG和GIF这是相当混乱。 那里的大多数类似的问题都涉及将图像保存到没有权限的文件。 讽刺的是,解决方案是使用一个内存流,因为我正在做… public static byte[] ConvertImageToByteArray(Image imageToConvert) { using (var ms = new MemoryStream()) { ImageFormat format; switch (imageToConvert.MimeType()) { case "image/png": format = ImageFormat.Png; break; case "image/gif": format = ImageFormat.Gif; break; default: format = ImageFormat.Jpeg; break; } imageToConvert.Save(ms, format); return ms.ToArray(); } } 更多的例外细节。 这导致这么多问题的原因是缺乏解释:( System.Runtime.InteropServices.ExternalException was unhandled by user […]

从视图模型(C#)设置WPF中的文本框焦点

我在我的视图中有一个TextBox和一个Button 。 现在我正在检查按钮单击条件,如果条件结果是false,显示消息给用户,然后我必须将光标设置到TextBox控件。 if (companyref == null) { var cs = new Lipper.Nelson.AdminClient.Main.Views.ContactPanels.CompanyAssociation(); MessageBox.Show("Company does not exist.", "Error", MessageBoxButton.OK, MessageBoxImage.Exclamation); cs.txtCompanyID.Focusable = true; System.Windows.Input.Keyboard.Focus(cs.txtCompanyID); } 上面的代码在ViewModel中。 CompanyAssociation是视图名称。 但是光标没有在TextBox设置。 xaml是: <igEditors:XamTextEditor Name="txtCompanyID" KeyDown="xamTextEditorAllowOnlyNumeric_KeyDown" ValueChanged="txtCompanyID_ValueChanged" Text="{Binding Company.CompanyId, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="{Binding ActualWidth, ElementName=border}" Grid.Column="1" Grid.Row="0" VerticalAlignment="Top" HorizontalAlignment="Stretch" Margin="0,5,0,0" IsEnabled="{Binding Path=IsEditable}"/> <Button Template="{StaticResource buttonTemp1}" Command="{Binding ContactCommand}" CommandParameter="searchCompany" Content="Search" Width="80" […]

事件处理程序是否停止发生垃圾回收?

如果我有以下代码: MyClass pClass = new MyClass(); pClass.MyEvent += MyFunction; pClass = null; pClass会被垃圾收集吗? 还是会在发生事件的时候继续运行呢? 为了允许垃圾收集,我需要执行以下操作吗? MyClass pClass = new MyClass(); pClass.MyEvent += MyFunction; pClass.MyEvent -= MyFunction; pClass = null;

C ++ 0x没有信号量? 如何同步线程?

C ++ 0x是否会出现没有信号量的情况? 关于使用信号量,Stack Overflow已经有一些问题了。 我一直使用它们(posix信号量)让一个线程在另一个线程中等待某个事件: void thread0(…) { doSomething0(); event1.wait(); … } void thread1(…) { doSomething1(); event1.post(); … } 如果我用互斥体做到这一点: void thread0(…) { doSomething0(); event1.lock(); event1.unlock(); … } void thread1(…) { event1.lock(); doSomethingth1(); event1.unlock(); … } 问题:这是丑陋的,并不能保证thread1首先锁定互斥锁(假设同一个线程应该锁定和解锁互斥锁,在thread0和thread1开始之前,也不能锁定event1)。 所以既然boost还没有信号量,那么实现上面的最简单的方法是什么?

为什么Thread.Sleep如此有害

我经常看到它提到了Thread.Sleep(); 不应该使用,但我不明白为什么这样。 如果Thread.Sleep(); 会造成麻烦,有没有其他的解决方案可以保证安全? 例如。 while(true) { doSomework(); i++; Thread.Sleep(5000); } 另一个是: while (true) { string[] images = Directory.GetFiles(@"C:\Dir", "*.png"); foreach (string image in images) { this.Invoke(() => this.Enabled = true); pictureBox1.Image = new Bitmap(image); Thread.Sleep(1000); } }

数据绑定到WPF Treeview中的SelectedItem

我怎样才能检索在WPF树视图中选择的项目? 我想在XAML中这样做,因为我想绑定它。 你可能会认为它是SelectedItem但显然不存在是只读的,因此不可用。 这是我想要做的: <TreeView ItemsSource="{Binding Path=Model.Clusters}" ItemTemplate="{StaticResource ClusterTemplate}" SelectedItem="{Binding Path=Model.SelectedCluster}" /> 我想将SelectedItem绑定到我的模型上的一个属性。 但是这给了我错误: “SelectedItem”属性是只读的,不能从标记中设置。 编辑:好的,这是我解决这个问题的方法: <TreeView ItemsSource="{Binding Path=Model.Clusters}" ItemTemplate="{StaticResource HoofdCLusterTemplate}" SelectedItemChanged="TreeView_OnSelectedItemChanged" /> 并在我的xaml的codebehind文件中: private void TreeView_OnSelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e) { Model.SelectedCluster = (Cluster)e.NewValue; }

有没有一种简单的方法来将C ++枚举转换为字符串?

假设我们有一些命名枚举: enum MyEnum { FOO, BAR = 0x50 }; 我搜索的是一个脚本(任何语言),它扫描我的项目中的所有标题,并生成一个标头,每个枚举一个函数。 char* enum_to_string(MyEnum t); 和一个像这样的实现: char* enum_to_string(MyEnum t){ switch(t){ case FOO: return "FOO"; case BAR: return "BAR"; default: return "INVALID ENUM"; } } 这个问题实际上是用typedefed枚举和未命名的C风格枚举。 有人知道这个吗? 编辑:解决方案不应该修改我的源,除了生成的功能。 枚举是在一个API中,所以使用到目前为止提出的解决方案不是一个选项。

字节+字节=整数…为什么?

看这个C#代码: byte x = 1; byte y = 2; byte z = x + y; // ERROR: Cannot implicitly convert type 'int' to 'byte' 在byte (或short )类型上执行的任何数学运算的结果都被隐式地转换回整数。 解决方案是显式地将结果转换回一个字节: byte z = (byte)(x + y); // this works 我想知道为什么? 它是建筑吗? 哲学? 我们有: int + int = int long + long = long float + float = […]

使用FileResult在Asp.Net MVC中下载任何类型的文件?

我曾经建议我应该使用FileResult来允许用户从我的Asp.Net MVC应用程序下载文件。 但是我能找到的唯一例子总是与图像文件(指定内容类型图像/ jpeg)有关。 但是,如果我不知道文件类型呢? 我希望用户能够从我的网站的filearea几乎下载任何文件。 我已经阅读了一个这样做的方法(请参阅前面的代码),实际上它工作正常,除了一件事情:在另存为对话框中出现的文件的名称从文件路径连接到下划线folder_folder_file.ext)。 此外,似乎人们认为我应该返回一个FileResult,而不是使用这个自定义类,我发现BinaryContentResult。 任何人都知道在MVC中做这种下载的“正确”方式? 编辑:我得到了答案(下面),但只是想我应该发布完整的工作代码,如果别人有兴趣: public ActionResult Download(string filePath, string fileName) { string fullName = Path.Combine(GetBaseDir(), filePath, fileName); byte[] fileBytes = GetFile(fullName); return File( fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName); } byte[] GetFile(string s) { System.IO.FileStream fs = System.IO.File.OpenRead(s); byte[] data = new byte[fs.Length]; int br = fs.Read(data, 0, data.Length); if (br != […]