小编adv*_*v12的帖子

子集基于变量列名

subset如果我不知道要测试的列的名称,我想知道如何使用该函数.场景是这样的:我有一个Shiny应用程序,用户可以选择一个变量来过滤(子集)数据表.我从webapp接收列名作为输入,我想根据该列的值进行子集,如下所示:

subset(myData, THECOLUMN == someValue)
Run Code Online (Sandbox Code Playgroud)

除非双方THECOLUMNsomeValue变数.是否有将所需列名称作为字符串传递的语法?

似乎想要一个作为列名的裸字,而不是一个包含列名的变量.

r subset shiny

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

仅在编辑并继续时出现CS7038错误(无法发出模块)

我在Visual Studio 2015中调试.NET 4.0应用程序.我的应用程序构建并运行良好,但是当我尝试编辑并在调试器下运行时继续运行时,无论我做了什么更改或在主项目中将它们放在何处,我得到一个对话框说:

编辑是无法编译的.在修复编译器错误之前,执行无法继续.

作为我正在谈论的那种变化的一个例子,我尝试用各种方法添加这一行:

Console.WriteLine("foo");
Run Code Online (Sandbox Code Playgroud)

当我查看Visual Studio的错误列表窗格时,我只看到一个错误CS7038,其描述为"无法发出模块<my app name>".没有给出文件名,行号或字符.我的代码中没有潦草的红色下划线.如果我停止正在运行的应用程序,使用更改进行构建,然后再次运行,则所有内容都会构建并运行正常.因此,构建时编译器和编辑并继续编译器认为可接受的内容之间似乎存在一些差异.

有没有人知道如何在编辑和继续模式下获得有关编译失败原因的更多信息?我读了一些关于附加和调试VBCSCompiler进程的内容,所以我尝试了,但即使抛出所有异常类型设置为break,附加的VS也从未破坏.

我没有共享任何代码,因为这不是关于我的代码的问题,而是关于找出编辑和继续编译器认为错误的策略,并且据我所知,编译器错误的来源可能在我的任何地方整个项目.

编辑:

正如评论中所提到的,我能够将调试器附加到Visual Studio,并在编辑代码后单击"继续"时抛出异常时中断.例外情况是System.NotSupportedException以下消息:"在调试期间不允许更改程序集引用的版本".它列出了有问题的程序集的名称,这是我的应用程序使用的一个小型VB.Net项目,主要在C#中.我正在尝试建立一个MCVE来提交给微软,但目前我无法用一个VB和一个C#项目在一个较小的解决方案中重现问题.

编辑2:

我找到了一个解决方法,并自行回答了问题,以防其他任何人遇到这个奇怪的问题,但我正在为任何能够解释发生了什么的人保留"已回答"的复选标记(为什么编译器认为版本号为在编辑期间引用的项目已更改).

c# edit-and-continue visual-studio roslyn visual-studio-2015

9
推荐指数
1
解决办法
2640
查看次数

在Windows 10平板电脑上的Windows窗体应用程序中发送到错误控件的垂直滑动模拟鼠标事件

我正在尝试在Windows 10平板电脑(Dell Venue 8 Pro)上运行Windows窗体应用程序.通常,Windows将触摸事件转换为明显的鼠标事件对应物.然而,它正在做垂直滑动的奇怪事情.

我的应用程序有一个自定义控件(直接从其构造函数中Control调用派生SetStyle(ControlStyles.Selectable..., true)),显示Direct3D呈现的图形.控件将MouseDown- > MouseMove- > MouseUp序列解释为旋转关于外观位置的视图的请求.这在桌面上运行良好,但在平板电脑上它会中断:我的自定义控件上的垂直滑动以某种方式被Windows捕获并传递到附近DataGridView,在那里它们被解释为滚动表格的请求.在DataGridView我的控制是不一样的容器下的兄弟姐妹; 它们处于完全不同的控制层次级别.这是一个截图:

应用程序的屏幕截图显示了垂直和水平滑动的不同解释

我做了一些调试,以证明在垂直滑动过程中没有任何鼠标事件可以控制我.当我抬起手指时,右边有一些涓涓细流,但在垂直滑动过程中没有任何东西.

问题似乎是我的代码(在事件处理程序中)根本没有运行,因为没有输入正在进入我的控制.

这里发生了什么,有什么办法可以告诉Windows不要将我控件上发生的垂直滑动事件发送到一个完全不相关的控件?

编辑:我应该补充一点,我Focus()在我的代码中调用了所有地方,以确保我的控件在鼠标悬停时聚焦.我把它放在OnMouseMove,OnMouseDown并且几乎每个其他鼠标事件.

编辑:我已经构建了一个小型Visual Studio 2010解决方案来演示此问题.这里有太多的代码可以在线重现,但很容易理解.构建它,将其安装在Windows 10平板电脑上,然后尝试在最右边的控件中垂直滑动.请注意,而不是那个控件接收一堆鼠标事件,DataGridView火灾Scroll.

更新:我已经明确测试了在DataGridView获取Scroll事件时我的控件是否集中.如果我如上所述呼叫Focus()我的控制以响应MouseMove等等,我的控制确实得到焦点并在垂直滑动时保持它DataGridView.Scroll.在DataGridView.Scroll事件处理程序中,我打印出我的控件是否是焦点,它是.所以这不是DataGridView偷窃重点的问题; DataGridView即使我的控制力集中,这也是我操控滑动的问题.

注意:如果我设置dataGridView.ScrollBarsScrollBars.None,则滑动的鼠标事件会转到我的控件.我一直在弄乱丑陋的黑客,每当我的控制集中注意力时隐藏滚动条,并在每次聚焦时显示它们DataGridView.但他们都是丑陋的黑客,有令人不快的副作用.

c# scroll touch winforms windows-10

8
推荐指数
1
解决办法
741
查看次数

使用CreateGraphics而不是Paint事件处理程序进行自定义绘图时绘制毛刺

我写了一个Windows窗体应用程序,我在其中Panel使用自定义绘图Control.CreateGraphics().这是我Form在创业时的样子:

绘制空白表格! 按键

自定义绘图Click在"绘图!" 的事件处理程序的顶部面板上执行.按钮.这是我的按钮点击处理程序:

private void drawButton_Click(object sender, EventArgs e)
{
    using (Graphics g = drawPanel.CreateGraphics())
    {
        g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
        g.Clear(Color.White);
        Size size = drawPanel.ClientSize;
        Rectangle bounds = drawPanel.ClientRectangle;
        bounds.Inflate(-10, -10);
        g.FillEllipse(Brushes.LightGreen, bounds);
        g.DrawEllipse(Pens.Black, bounds);
    }
}
Run Code Online (Sandbox Code Playgroud)

单击后drawButton,表单如下所示:

形状与绿色填充椭圆

成功!

但是当我通过拖动角落缩小形状时......

相同的形式,缩小到部分隐藏椭圆

...并将其扩展回原始大小,

右侧和底部缺少图形的表格

我画的部分内容已经消失了!

当我将部分窗口拖到屏幕外时也会发生这种情况......

形成部分屏幕外

...然后将其拖回屏幕:

返回屏幕,但缺少一半的图形

如果我最小化窗口并恢复它,整个图像将被删除:

像第一张图片的空白表格

是什么造成的?我怎样才能使我绘制的图形持久存在?

注意:我已经创建了这个自我回答的问题,所以我有一个规范的Q/A来引导用户,因为如果您还不知道问题的原因,这是一个很难搜索的常见场景.

c# winforms

6
推荐指数
1
解决办法
1580
查看次数

类中的方法声明的顺序是否与编译器有关?

我在C++项目中使用第三方静态库(.lib文件).静态库的作者为我添加了一个类的方法,并向我发送了库的更新版本.

不幸的是,他没有发送新的头文件并且与他的通信很慢,所以我可能很快就不会得到新的标题.我知道新方法的方法签名,所以我可以将它添加到头文件中.

我的问题是,在公共方法列表中我添加新声明(顶部,底部,中间......)是否重要.我最好的猜测是,它确实并且头文件中的顺序决定了编译类中的顺序.有人可以确认或反驳这个吗?

c++

6
推荐指数
1
解决办法
1243
查看次数

.NET Framework类如何引用本机Windows DLL而不会变得特定于位?

我已经阅读了很多问题和答案,表明如果我想将C#项目与本机库相关联,我就不能使用AnyCPU平台目标,但必须制作单独的32位和64位版本,每个版本都链接到相应的本机DLL位元.

这让我想知道.NET Framework程序集本身是如何构建的,或者至少看起来是如何构建的AnyCPU.也就是说,在添加对我的GUI应用程序的引用时,为什么我不必选择3​​2位或64位版本System.Windows.Forms?我认为这可能只是一些Visual Studio魔法会解析到相应的GAC子目录(GAC_32或GAC_64),但我在GAC中搜索了System.Windows.Forms.dll并在以下位置找到它:

C:\ WINDOWS\Microsoft.NET \装配\ GAC_MSIL\System.Windows.Forms的\ v4.0_4.0.0.0__b77a5c561934e089\System.Windows.Forms.dll中

请注意"GAC_MSIL".那么这个DLL如何设法包装本机32位API,但仍然可以在64位应用程序中链接?为什么我不能使用类似的策略来制作一个链接本机32位库但仍然可以在64位模式下运行的C#DLL?

c# gac 32bit-64bit

6
推荐指数
1
解决办法
226
查看次数

并行内存障碍

Microsoft的Parallel.For文档包含以下方法:

static void MultiplyMatricesParallel(double[,] matA, double[,] matB, double[,] result)
{
    int matACols = matA.GetLength(1);
    int matBCols = matB.GetLength(1);
    int matARows = matA.GetLength(0);

    // A basic matrix multiplication.
    // Parallelize the outer loop to partition the source array by rows.
    Parallel.For(0, matARows, i =>
    {
        for (int j = 0; j < matBCols; j++)
        {
            double temp = 0;
            for (int k = 0; k < matACols; k++)
            {
                temp += matA[i, k] * matB[k, j];
            }
            result[i, j] = …
Run Code Online (Sandbox Code Playgroud)

c# multithreading memory-barriers parallel.for

6
推荐指数
3
解决办法
461
查看次数

在 LINQ 中分组时如何显式声明类型?

我正在使用GroupBy(...),我意识到,虽然工作,但我不喜欢使用var。请叫我肛门,但我想知道当我拥有它时我的类型是什么。(当然,我不是一个理论家,当语法让人眼睛流血时,我确实使用var。不过,如果有人敦促出现的话,很高兴知道如何明确它。)

var grouping = array.GroupBy(element => element.DayOfWeek);
foreach (var group in grouping)
{
  Console.WriteLine("Group " + group.Key);
  foreach (var value in group)
    Console.WriteLine(value.Start);
}
Run Code Online (Sandbox Code Playgroud)

根据智能感知,我正在生成IGrouping类型的内容,但是当我尝试显式输入该内容时,发生了奇怪的事情。我已经到达以下位置。

IEnumerable<IGrouping<DayOfWeek, TimeInfo>> grouping 
  = array.GroupBy(element => element.DayOfWeek);
foreach (IGrouping<DayOfWeek, TimeInfo> group in grouping)
{
  Console.WriteLine("Group " + group.Key);
  foreach (TimeInfo value in group)
    Console.WriteLine(value.Start);
}
Run Code Online (Sandbox Code Playgroud)

我的问题是两个问题。下面的结果是正确且最窄的范围吗?如果没有,我怎样才能额外收紧呢?

但是,如果是这样,我想知道是否有更好的方法来完成这项任务。我只需要根据星期几(或实际生产中的任何其他条件)将数组中的元素放入不同的容器中。我真的不需要密钥,只是一种将我的一维数组变成二维数组的方法。可以这么说,这与SelectMany相反。(不需要广泛的答案 - 只需一个可以谷歌搜索的关键字。)

c# linq arrays group-by

5
推荐指数
1
解决办法
514
查看次数

这个C#代码是否会因为寄存器或缓存中的值永远不会写回主内存而失败?

在这篇文章中:

http://msdn.microsoft.com/en-us/magazine/jj883956.aspx

作者声明,由于"循环读取提升",以下代码可能会失败:

class Test
{
  private bool _flag = true;
  public void Run()
  {
    // Set _flag to false on another thread
    new Thread(() => { _flag = false; }).Start();
    // Poll the _flag field until it is set to false
    while (_flag) ;
    // The loop might never terminate!
  }
}
Run Code Online (Sandbox Code Playgroud)

在循环读取提升中,由于单线程假设,编译器可能会将上面的while循环更改为以下内容:

if (_flag) { while (true); }
Run Code Online (Sandbox Code Playgroud)

我想知道的是:如果编译器没有执行该优化,由于一个处理器更新寄存器或缓存中的_flag并且从不将该缓存刷新回到多处理器机器上,因此循环仍有可能永远在多处理器机器上运行内存可以被其他线程读取?我已经读到"C#写入是易失性的",但是我链接的文章说ECMA规范实际上并没有保证这一点,并且事情没有在ARM上实现.我试图弄清楚我必须要编写一些可以在所有平台上运行的线程代码.

这是一个相关的问题:

C#线程是否真的可以缓存一个值并忽略其他线程上该值的更改?

但我认为接受的答案中的代码可能会通过循环读取提升进行优化,因此它无法证明内存可见性......

c# multithreading caching

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

MemoryBarrier是否保证所有内存的内存可见性?

如果我理解正确,在C#中,lock块保证对一组指令的独占访问,但它也保证从内存中的任何读取都反映了任何CPU缓存中该内存的最新版本.我们认为lock块是保护块内读取和修改的变量,这意味着:

  1. 假设您已经在必要时正确实现了锁定,那么这些变量一次只能被一个线程读取和写入,并且
  2. lock块内的读取参见变量的最新版本,lock块内的写入对所有线程都可见.

(对?)

第二点是我感兴趣的.是否存在一些魔力,只有在lock块保护的代码中读取和写入的变量才能保证新鲜,或者在实现中使用的内存屏障是否lock保证所有内存现在对所有线程都同样新鲜?请原谅我在这里关于缓存是如何工作的心理模糊性,但我已经读过缓存存有几个多字节"数据线"的数据.我想我要问的是,内存屏障是否强制同步所有 "脏"缓存行或只是一些,如果只是一些,是什么决定了哪些行同步?

c# multithreading

3
推荐指数
2
解决办法
367
查看次数

报告Async Task的进度

你好开发者,

我面临着一个轻微的困境.我有一个WPF应用程序,它读取一个相当大的Excel文件,然后将其作为XML文件输出.我面临的问题是我想将操作的进度报告给处理程序.

我无法让它"顺利"工作,字面意思是GUI线程中的进度条立即被填充,然后立即填充保存从Excel文件读取的内容的DataGrid.

我是Async/Await/Task的新手,到目前为止我一直在使用BackgroundWorker,但我希望获得更多关于此的知识,所以如果这是一个愚蠢的问题,我很抱歉.

我从这里读过Stephen Cleary的教程.

老实说,我不知道为什么进度条不能"顺利"填充,因为它应该......

在GUI中调用的代码:

        var progress = new Progress<int>(progressPercent => pBar.Value = progressPercent);

        Task.Run(() => _sourceService.ReadFileContent(filePath, progress)).ContinueWith(task =>
        {

            dataGrid.ItemsSource = task.Result.DefaultView;
            DataTable = task.Result;

            if (DataTable.Rows.Count > 0)
                BtnCreateXmlFile.IsEnabled = true;

        }, CancellationToken.None, TaskContinuationOptions.None, TaskScheduler.FromCurrentSynchronizationContext());
Run Code Online (Sandbox Code Playgroud)

方法体ReadFileContent(filePath, progress):

public DataTable ReadFileContent(string filePath, IProgress<int> progress)
    {
        var rowStart = 7;
        var columnStart = 1;

        var existingFile = new FileInfo(filePath);
        using (var package = new ExcelPackage(existingFile))
        {
            var worksheet = package.Workbook.Worksheets["BOP"];
            var dt …
Run Code Online (Sandbox Code Playgroud)

c# wpf asynchronous task

3
推荐指数
1
解决办法
2622
查看次数

如何打破do while循环?

我是编码新手,并且一直在尝试使用文本文件进行登录(我知道我不知道使用文本文件进行登录是不安全的)

namespace text_file_login
{
    public partial class Login : Form
    {
        public Login()
        {
            InitializeComponent();
        }

        private void btn_register_Click(object sender, EventArgs e)
        {
            StreamWriter user_reg =
                new StreamWriter(@"E:\SSD\Controled Assesment\text file login\text file login\username.txt");
            StreamWriter pass_reg =
                new StreamWriter(@"E:\SSD\Controled Assesment\text file login\text file login\password.txt");

            user_reg.WriteLine(txt_user.Text);
            user_reg.Close();
            pass_reg.WriteLine(txt_pass.Text);
            pass_reg.Close();

            MessageBox.Show("Register was sucessful");
        }

        private void btn_login_Click(object sender, EventArgs e)
        {
            string user = "";
            string pass = "";
            int user_line_number = 0;
            int pass_line_number = 0;
            StreamReader user_login =
                new StreamReader(@"E:\SSD\Controled Assesment\text …
Run Code Online (Sandbox Code Playgroud)

c# login text-files

0
推荐指数
1
解决办法
3504
查看次数