我有一个场景。(Windows窗体,C#、. NET) 有一个主窗体可以承载一些用户控件。 用户控件执行一些繁重的数据操作,因此,如果我直接调用该UserControl_Load方法,则UI将在装入方法执行期间无响应。 为了克服这个问题,我将数据加载到不同的线程上(尝试尽我所能更改现有代码) 我使用了一个后台工作线程来加载数据,完成后将通知应用程序它已经完成了工作。 现在出现了一个真正的问题。所有UI(主窗体及其子用户控件)均在主主线程上创建。在usercontrol的LOAD方法中,我基于userControl上某些控件(如文本框)的值获取数据。 伪代码如下所示: 代码1 UserContrl1_LoadDataMethod() { if (textbox1.text == "MyName") // This gives exception { //Load data corresponding to "MyName". //Populate a globale variable List<string> which will be binded to grid at some later stage. } } 它给的例外是 跨线程操作无效:从创建该线程的线程以外的线程访问控件。 要了解更多信息,我进行了一些谷歌搜索,并提出了一条建议,例如使用以下代码 代码2 UserContrl1_LoadDataMethod() { if (InvokeRequired) …
今天,我需要一种简单的算法来检查数字是否为2的幂。 该算法需要为: 简单 更正任何ulong值。 我想出了这个简单的算法: private bool IsPowerOfTwo(ulong number) { if (number == 0) return false; for (ulong power = 1; power > 0; power = power << 1) { // This for loop used shifting for powers of 2, meaning // that the value will become 0 after the …
有没有办法case value:反复声明多个case语句? 我知道这可行: switch (value) { case 1: case 2: case 3: // Do some stuff break; case 4: case 5: case 6: // Do some different stuff break; default: // Default stuff break; } 但我想做这样的事情: switch (value) { case 1,2,3: // Do something break; case 4,5,6: // Do something …
当您拥有服务器端代码(即某些代码ApiController)并且您的函数是异步的(因此它们返回)Task<SomeObject>时,是否在任何时候都等待调用的函数是否被视为最佳实践ConfigureAwait(false)? 我已经读到它具有更高的性能,因为它不必将线程上下文切换回原始线程上下文。但是,对于ASP.NET Web Api,如果您的请求是在一个线程上传入的,并且您等待某个函数并调用ConfigureAwait(false),则在返回ApiController函数的最终结果时,该函数可能会将您置于另一个线程上。 我在下面输入了一个我正在谈论的例子: public class CustomerController : ApiController { public async Task<Customer> Get(int id) { // you are on a particular thread here var customer = await SomeAsyncFunctionThatGetsCustomer(id).ConfigureAwait(false); // now you are on a different thread! will that cause problems? return customer; } }