小编Hen*_*man的帖子

跨线程操作无效:从创建它的线程以外的线程访问控件

我有一个场景.(Windows Forms,C#,.NET)

  1. 有一个主要表单托管一些用户控件.
  2. 用户控件执行一些繁重的数据操作,这样如果我直接调用了 UserControl_Load方法,则UI在加载方法执行的持续时间内变得无响应.
  3. 为了克服这个问题,我在不同的线程上加载数据(尝试尽可能少地更改现有代码)
  4. 我使用了后台工作线程来加载数据,完成后会通知应用程序已经完成了它的工作.
  5. 现在来了一个真正的问题.所有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.
    }
}
Run Code Online (Sandbox Code Playgroud)

它给出的例外是

跨线程操作无效:从创建它的线程以外的线程访问控件.

为了更多地了解这一点,我做了一些谷歌搜索,并提出了一个建议,如使用下面的代码

代码2

UserContrl1_LoadDataMethod()
{
    if (InvokeRequired) // Line #1
    {
        this.Invoke(new MethodInvoker(UserContrl1_LoadDataMethod));
        return;
    }

    if (textbox1.text == "MyName") // Now it wont give an exception
    {
    //Load data correspondin to "MyName"
        //Populate a globale …
Run Code Online (Sandbox Code Playgroud)

c# multithreading invoke winforms

559
推荐指数
18
解决办法
39万
查看次数

如何让光标转到等待光标?

我有一个C#应用程序,用户登录它,并且因为散列算法很昂贵,所以需要一些时间.如何向用户显示等待/忙碌光标(通常是沙漏),让他们知道程序正在做什么?

该项目在C#中.

.net c# cursor winforms

243
推荐指数
8
解决办法
39万
查看次数

不允许新事务,因为在会话LINQ To Entity中运行其他线程

关于为什么这可能会破裂的任何想法?

foreach (var p in pp)
{
    ProjectFiles projectFile = (ProjectFiles)p;
    projectFile.Status = Constants.ProjectFiles_ERROR;
    projectFile.DateLastUpdated = DateTime.Now;
    context.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)

我读到问题的解决方法是在foreach循环之前一次性检索结果.

但我不这样做吗?"pp"是我案例中的结果集合

c# linq linq-to-entities

140
推荐指数
2
解决办法
8万
查看次数

WPF Numeric UpDown控件在哪里?

进入第一个严肃的WPF项目.似乎缺少很多基本控件.具体来说,我正在寻找Numeric UpDown控件.有没有我错过的带外发布?真的不想写我自己的控件.

我不想使用WindowsFormHost并在其上安装WinForm ctl.我希望它完全没有任何遗留垃圾的WPF.

谢谢

wpf controls numericupdown updown

118
推荐指数
9
解决办法
15万
查看次数

#if在c#中没有调试?

我在vb代码中有一行:

#if Not Debug
Run Code Online (Sandbox Code Playgroud)

我必须转换,我在c#中看不到它?

有没有相当于它的东西,还是有一些解决方法?

c# vb.net

112
推荐指数
4
解决办法
5万
查看次数

理解C#中的Covariant和Contravariant接口

我在C#上阅读的教科书中遇到过这些,但我很难理解它们,可能是由于缺乏背景.

是否有一个很简洁的解释,说明它们是什么以及它们对那里有用的东西?

编辑以澄清:

协变界面:

interface IBibble<out T>
.
.
Run Code Online (Sandbox Code Playgroud)

逆变接口:

interface IBibble<in T>
.
.
Run Code Online (Sandbox Code Playgroud)

.net c# interface covariance contravariance

82
推荐指数
2
解决办法
2万
查看次数

如何使用多个条件过滤Directory.EnumerateFiles?

我有以下代码:

List<string> result = new List<string>();

foreach (string file in Directory.EnumerateFiles(path,"*.*",  
      SearchOption.AllDirectories)
      .Where(s => s.EndsWith(".mp3") || s.EndsWith(".wma")))
       {
          result.Add(file);                 
       }
Run Code Online (Sandbox Code Playgroud)

它工作正常,做我需要的.除了一件小事.我想找到一种更好的方法来过滤多个扩展.我想使用带有过滤器的字符串数组,例如:

string[] extensions = { "*.mp3", "*.wma", "*.mp4", "*.wav" };
Run Code Online (Sandbox Code Playgroud)

使用.NET Framework 4.0/LINQ执行此操作的最有效方法是什么?有什么建议?

我很感激任何帮助成为偶尔的程序员:-)

.net c#

72
推荐指数
6
解决办法
7万
查看次数

如何使用c#只获取目录中的文件名?

当我使用下面的代码行时,我得到一个包含单个文件的完整路径的字符串数组.

private string[] pdfFiles = Directory.GetFiles("C:\\Documents", "*.pdf");
Run Code Online (Sandbox Code Playgroud)

我想知道是否有办法只检索字符串中的文件名而不是整个路径.

.net c#

71
推荐指数
3
解决办法
14万
查看次数

快速简单的哈希码组合

人们可以推荐快速简单的方法来组合两个对象的哈希码.我并不太担心碰撞,因为我有一个Hash Table可以有效地处理这个问题我只想要尽可能快地生成代码的东西.

阅读SO和网络似乎有几个主要候选人:

  1. 异或
  2. 使用Prime乘法进行异或
  3. 简单的数字运算,如乘法/除法(溢出检查或环绕)
  4. 构建一个String然后使用String类的Hash Code方法

人们会推荐什么?为什么?

c# algorithm hash hashcode

55
推荐指数
5
解决办法
3万
查看次数

有可读的编程语言吗?

我的意思是,是否有编码语言与人类风格编码?例如:

Create an object called MyVar and initialize it to 10;
Take MyVar and call MyMethod() with parameters. . .
Run Code Online (Sandbox Code Playgroud)

我知道它不是那么有用,但创建这样的语法会很有趣.

grammar nlp

52
推荐指数
21
解决办法
1万
查看次数