Tag: C#的

如何在等待中取消任务?

我正在玩这些Windows 8的WinRT任务,我试图用下面的方法取消一个任务,这个任务很有用。 CancelNotification方法被调用,这使得你认为任务被取消了,但是在后台任务继续运行,然后在任务完成之后,任务的状态总是被完成并且不会被取消。 有没有办法在取消任务时完全停止任务? private async void TryTask() { CancellationTokenSource source = new CancellationTokenSource(); source.Token.Register(CancelNotification); source.CancelAfter(TimeSpan.FromSeconds(1)); var task = Task<int>.Factory.StartNew(() => slowFunc(1, 2), source.Token); await task; if (task.IsCompleted) { MessageDialog md = new MessageDialog(task.Result.ToString()); await md.ShowAsync(); } else { MessageDialog md = new MessageDialog("Uncompleted"); await md.ShowAsync(); } } private int slowFunc(int a, int b) { […]

为什么枚举类优先于普通枚举?

我听到一些人build议在C ++中使用枚举类 ,因为它们的types安全 。 但是这到底意味着什么呢?

我应该更喜欢成员数据中的指针或引用吗?

这是一个简单的例子来说明这个问题: class A {}; class B { B(A& a) : a(a) {} A& a; }; class C { C() : b(a) {} A a; B b; }; 所以B负责更新C的一部分。我通过lint运行代码,并发出关于引用成员的声音: lint#1725 。 这里谈到关于默认的副本和分配,这是公平的,但默认的副本和分配也是坏指针,所以没有什么优势。 我总是尽可能地使用引用,因为裸指针不确定地引入谁负责删除指针。 我更喜欢通过值embedded对象,但如果我需要一个指针,我使用auto_ptr在拥有指针的类的成员数据,并作为参考传递对象。 我通常只会在指针可能为空或者可能改变时才在成员数据中使用指针。 有什么其他的理由喜欢指针比数据成员的引用? 是否真的说包含引用的对象不应该是可分配的,因为一旦初始化引用不应该被改变?

在循环中声明variables,好的做法或不好的做法?

问题1:在循环中声明一个variables是一种好的做法还是不好的做法? 我已经阅读了关于是否存在性能问题的其他线索(大多数说不),并且应该总是将variables声明为接近它们将要使用的位置。 我想知道的是这是否应该避免,或者如果它实际上是首选。 例: for(int counter = 0; counter <= 10; counter++) { string someString = "testing"; cout << testing; } 问题2:大多数编译器是否意识到这个variables已经被声明过,并且只是跳过这个部分,或者每次都在内存中创build一个内存点?

如何在C ++中使用PI常量

我想在一些C ++程序中使用PI常量和三angular函数。 我用include <math.h>得到三angular函数。 但是,在这个头文件中似乎没有PI的定义。 如何获得PI而无需手动定义?

我应该在C ++中使用std :: function或函数指针吗?

在C ++中实现一个callback函数时,我还应该使用C样式的函数指针: void (*callbackFunc)(int); 或者我应该使用std :: function: std::function< void(int) > callbackFunc;

如何查找本机DLL文件是否被编译为x64或x86?

我想确定本机程序集是否从托pipe代码应用程序( C# )编译为x64或x86。 我认为它必须在PE头的某个地方,因为OS加载器需要知道这个信息,但我找不到它。 当然,我更喜欢用托pipe代码来做,但如果有必要,我可以使用本机C ++。

使用Lambda / Linq将对象列表sorting

我有一个string中的“按属性sorting”的名称。 我将需要使用Lambda / Linq来sorting对象列表。 例如: public class Employee { public string FirstName {set; get;} public string LastName {set; get;} public DateTime DOB {set; get;} } public void Sort(ref List<Employee> list, string sortBy, string sortDirection) { //Example data: //sortBy = "FirstName" //sortDirection = "ASC" or "DESC" if (sortBy == "FirstName") { list = list.OrderBy(x => x.FirstName).toList(); […]

在C代码中处理错误

在C库中以一致的方式处理错误时,你认为什么是“最佳实践”? 有两种方法我一直在想: 总是返回错误代码。 一个典型的函数看起来像这样: MYAPI_ERROR getObjectSize(MYAPIHandle h, int* returnedSize); 总是提供一个错误指针的方法: int getObjectSize(MYAPIHandle h, MYAPI_ERROR* returnedError); 在使用第一种方法时,可以像这样编写代码,将error handling检查直接放在函数调用上: int size; if(getObjectSize(h, &size) != MYAPI_SUCCESS) { // Error handling } 这看起来比这里的error handling代码更好。 MYAPIError error; int size; size = getObjectSize(h, &error); if(error != MYAPI_SUCCESS) { // Error handling } 不过,我认为使用返回值来返回数据会使代码更具可读性。很明显,在第二个示例中写入了sizevariables。 你有什么想法,为什么我应该喜欢任何这些方法,或者混合使用或使用其他的东西? 我不是全局错误状态的粉丝,因为它倾向于使multithreading使用库方式更痛苦。 编辑:关于这一点的C ++具体想法也将是有趣的听到,只要他们不涉及例外,因为它不是我目前的select…

为什么使用未命名的命名空间,它们的好处是什么?

我刚刚join了一个新的C ++软件项目,并试图理解这个devise。 该项目经常使用未命名的名称空间。 例如,在类定义文件中可能会出现类似这样的情况: // newusertype.cc namespace { const int SIZE_OF_ARRAY_X; const int SIZE_OF_ARRAY_Y; bool getState(userType*,otherUserType*); } newusertype::newusertype(…) {… 什么是可能导致使用未命名的命名空间的devise注意事项? 有什么优点和缺点?