小编Cod*_*gry的帖子

WPF高度并发跨线程UI访问

在C#中,我有几个工作,我需要将其反映到UI中.更新进度条,将项添加到列表等.

我第一次尝试这样做时,我用锁来准备一切,以确保每个给定时刻只有一个线程访问UI,但我得到了一个例外.所以我了解到我需要使用它Dispatcher.Invoke来访问和更改UI元素.将每个UI更改包含在调用中是非常麻烦的,但我可以处理它.

我的问题:

  • 是否有必要同步Dispatcher.Invoke呼叫或内部完成?所以我想知道我是否需要用锁添加另一层保护......
  • 它是否会影响排队到调度员的许多更新请求的性能?因此,如果多个线程工作并且每个线程都通过一个小的更改反映到UI中,那么对Dispatcher.Invoke`发出许多调用会如何影响性能?我应该使用计时器并且每秒只更新一次UI并在内部对所有UI更改进行排队吗?
  • 是否有更简单的方法来进行跨线程访问更内联...没有调用?

.net c# wpf multithreading

4
推荐指数
1
解决办法
757
查看次数

为什么DBNull.Value需要正确的SqlDbType?

我编写了一堆通用的C#辅助函数作为我的SQL查询的基础.所有null对象参数都转换为a DBNull.Value.但是当目标列是a时varbinary,它告诉我该string类型与该类型不兼容,binary我必须转换.

为什么我需要SqlDbType一个DBNull.Value在C#中?有没有通用的方法来解决这个问题?

// works for nvarchar but throws for varbinary columns
// notice the lack of SqlDbType as I don't know it for a null object
var param1 = new SqlParameter();
param1.Name = "@Param1";
param1.Value = DBNull.Value;
Run Code Online (Sandbox Code Playgroud)

它是一个空的...它不需要任何类型.SQL服务器知道null的类型.在SQL你说[Column] IS NULL不是[Column] IS TYPE NULL.所以null是无类型的.并且目标列是从查询解析而不是SqlDbType.

我发现这非常不直观(显式输入空值).我想知道我是否遗漏了一些东西......

代码是这样的:

SqlCommand CreateCommand(string query, params object[] arguments) { ... }
// in here …
Run Code Online (Sandbox Code Playgroud)

c# sql-server

4
推荐指数
1
解决办法
928
查看次数

任何VS C#方式列出所有`throw new NotImplementedException()`方法?

是否有任何懒惰的方法来列出只有throw new NotImplementedException();在他们的身体中的所有方法...这是内置的Visual Studio C#?类似的东西,(Todo) Task List Pane但只会列出明显待定/等待实施的空投掷占位方法?

它有助于实现接口并轻松跟踪事物.

c# visual-studio

4
推荐指数
1
解决办法
538
查看次数

为什么empty()std :: basic_string c_str()不是nullptr?

(在周日晚上思考)

在我编写的函数中,我倾向于依赖于相同字符串的两个const char*和模板化内联const std::basic_string<>&变体.但我真的好奇为什么c_str()空字符串不是nullptr.

大多数C++程序员现在忽略const char*指针作为C代码,但我认为它非常C++,因为字符串被null终止和连续,并将继续这样.但是如果使用自定义分配器,那么使用const std::string&参数编写的所有代码都是没有意义的(除非只有标头).

因此,您真正的选择(如果您想要多才多艺)是老式字符指针或内联模板化函数,可以支持各种std::basic_string自定义分配器或特征.这会强制您内联模板化函数,因为您无法正确预测模板参数.

现在我的问题是:为什么空字符串不为c_str()返回nullptr?作为字符串函数中的最小公分母,特别是对于只读访问而言,const char*不是const std::string&因为约束而被模板化的.返回一个指向任何东西的指针,特别是当没有字符串赋值时......在我看来很奇怪.

或者我是不是太疯狂了呢?总是担心两者const char*和模板const std::basic_string<char, ..., ...>&对手.如果std::string().c_str()在哪里nullptr,我不担心.但我必须自己防范空弦,因为c_str()它不可靠std::basic_string.

PS:我知道旧的字符串函数在与空指针一起使用时会崩溃,但是在任何地方使用字符串之前,可以轻松地测试有效指针和非空的第一个字符.

PPS:我在这里谈论理智的以空字符结尾的字符串,而不是std::basic_string特别支持的包含空值的伪字符串.

问题重复:为什么不std::string().c_str()应该指向内存?它应该是nullptr.不像std::string().c_str("")是一个空字符串,需要\0尾随它.所以它实际上指向有效的内存.(如果您不理解字符串/指针是如何工作的,请不要费心回答.这需要一些类似C的理解.)

c++ string stl std c++11

-2
推荐指数
2
解决办法
4668
查看次数

标签 统计

c# ×3

.net ×1

c++ ×1

c++11 ×1

multithreading ×1

sql-server ×1

std ×1

stl ×1

string ×1

visual-studio ×1

wpf ×1