小编qJa*_*ake的帖子

我何时才能打电话给DoEvents?

如果我循环执行一个延长的操作(比如说,处理文件)并且我想更新进度条,我需要使用DoEvents,这是我能理解的.

但是在函数的每个循环中调用它只会导致进度条的动画播放速度非常快(或者很慢,具体取决于操作).我知道这是因为DoEvents允许进度条"呼吸",因为没有更好的单词,导致它和表单的其余部分刷新.

我的问题是,你怎么知道调用DoEvents是合适的?显然你不能只是随心所欲地调用它 - 通常你会觉得它 - 这会导致零星的动画等等.那么是否有一些快速方法来检查表单/应用程序是否需要调用DoEvents?

c# doevents

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

如何使用 VB6 获取硬件信息,例如 CPU 名称、总 RAM 等?

标题几乎说明了一切。我需要使用 VB6 获取一些硬件信息,例如 CPU 信息和总 RAM。理想情况下,它会为 CPU 返回类似以下内容:

英特尔酷睿 2 四核 Q8500 2.66 GHz

对于 RAM,一些简单的东西,例如计算机总共拥有的 MB 量的整数。

vb6 winapi

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

WiX:多个MSI文件?

是否可以在Visual Studio的解决方案中安装一个"WiX安装程序"项目,但该项目输出多个安装程序文件(通过多个.wxs文件或多个文件或<Feature>其他方式)?也许一个.msx文件的.wxs文件?

windows-installer wix visual-studio

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

在SELECT语句中使用内联存储过程的结果

我想在一个SELECT语句的列定义中执行内联存储过程,类似于:

SELECT n.Name,
       n.Key,
       (EXEC sp_GetNickname @nameKey = n.NameKey) AS Nickname
FROM Names n
Run Code Online (Sandbox Code Playgroud)

我无权修改存储过程(它来自第三方系统),但我知道它总是只选择一行和一列(它是标量结果).

我需要能够内联调用它,因为这个select语句在递归CTE中,如下所示:

WITH Nicknames (Name, Key)
AS
(
    SELECT ... -- Base
    UNION ALL
    SELECT ... -- Recursive
)
Run Code Online (Sandbox Code Playgroud)

如果存储过程更有用,它还有一个"OUT"版本的存储过程,它将按如下方式执行:

EXEC sp_GetNicknameOut @nameKey = n.NameKey,
                       @outNickname = @theNickname OUTPUT
Run Code Online (Sandbox Code Playgroud)

我无法向数据库添加任何存储过程或函数,因为此查询是在动态执行C#应用程序.

我怎样才能做到这一点?

sql sql-server stored-procedures common-table-expression

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

如何覆盖默认的“全局”键盘快捷键并创建我自己的快捷键?

我了解 WPF 中的基本事件路由/冒泡(虽然显然还不够)……我想要做的是在我的 WPF 桌面应用程序中使用基本的键盘快捷键。例如,我有一个 ListBox,当用户按下Page-Up或 时Page-Down(应用程序中可以聚焦任何内容),我希望列表框选择其上一项或下一项(如果适用)。

这是我到目前为止所拥有的,但它不起作用。这是一个名为“Main”的窗口的构造函数:

public Main()
{
    InitializeComponent();

    // Initialize keyboard shortcuts
    KeyDown += (s, e) =>
    {
        var viewModel = GetActiveViewModel();
        if (e.Key == Key.PageUp)
        {
            viewModel.SelectPreviousItem();
            e.Handled = true;
        }
        else if (e.Key == Key.PageDown)
        {
            viewModel.SelectNextItem();
            e.Handled = true;
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

此代码没有工作,活动控件正在“窃取”事件并实现默认行为,例如,如果我选择了一个文本框,则文本框正在移动光标,如果我选择了列表框,则列表框正在将选定的索引移动一个“页面”,而不是像我想要的单个项目。

如何指示 WPF“忽略”任何默认键盘挂钩并用我自己的逻辑替换它们?我知道我将“覆盖”某些控件的默认行为(例如,文本框中的Page-Up/Page-Down将不再移动光标),没关系,这就是我想要的。

.net c# wpf keyboard-shortcuts

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

Azure AD的Active Directory身份验证例外(AADSTS90027)

我有一个本机客户端应用程序,它获取Active Directory授权的OAuth2令牌.然后,它将使用该令牌与安全的Web API服务器进行通信,其中使用该[Authorize]属性保护API的某些区域.该服务器还在Azure AD中注册,可以通过AD正确授权请求.

当我尝试获取令牌时,我在下面的代码的第2行得到以下异常:

其他信息:invalid_request:AADSTS90027:客户端"<Client GUID>"和资源" https://abccompany.com/MyApplication.Server "标识相同的应用程序.

这是我在本机客户端中运行的代码(现在只需按下按钮作为测试).显然,GUID和公司名称已被混淆.

AuthenticationContext ac = new AuthenticationContext("https://login.windows.net/abccompany.com");
AuthenticationResult ar = ac.AcquireToken("https://abccompany.com/MyApplication.Server", "<Client GUID>", new Uri("https://localhost:44300/secure"), PromptBehavior.Auto);
Run Code Online (Sandbox Code Playgroud)

我确保在应用程序配置中Azure中存在重定向(否则会出现重定向错误).错误是什么意思?

c# authentication asp.net-mvc authorization azure-active-directory

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

选择列不在另一列中的位置2次

如果我有这样的表称为"表"

+--------------+
| id | c1 | c2 |
+--------------+
| 1  | a  | 0  |
| 2  | b  | 1  |
| 3  | c  | 1  |
| 4  | d  | 2  |
| 5  | e  | 2  |
| 6  | f  | 3  |
| 7  | g  | 4  |
| 8  | h  | 5  |
+--------------+
Run Code Online (Sandbox Code Playgroud)

我想选择''''''''''''''''''''''''''''''''''''''''''''''''

mysql sql

2
推荐指数
1
解决办法
313
查看次数

支持和反对对象处理自身持久性的原因

我正在研究使用独立存储在Windows Phone中进行持久性建模的不同选项.我提出的一个想法是每个对象处理它自己的概念(当然是理所当然的)持久性,而不是为了保存对象而创建一个存储库或其他这样的实体.

我似乎无法找到关于这种持久性方法的任何好信息,这让我相信我可能偶然发现了一种反模式.

有没有人以这种方式接近坚持?如果是这样的话,你对这种方法的看法是什么?

c# persistence design-patterns code-design

2
推荐指数
1
解决办法
110
查看次数

阻止ForEach直到异步事件完成

我正在使用ReportViewer控件和自定义打印作业工作流程,这会导致一些问题.我的代码看起来有点像这样:

        ids.ForEach(delegate(Guid? guid)
            {
                var details = items.Where(e => e.guid == guid);

                var ds = new ReportDataSource("Form", details);
                ReportViewer.LocalReport.DataSources.Clear();
                ReportViewer.LocalReport.DataSources.Add(ds);
                ReportViewer.RefreshReport();

            });
Run Code Online (Sandbox Code Playgroud)

RefreshReport()最终调用它时会触发它的RenderingComplete事件,并且在那个事件中我有逻辑来排队打印作业:

        if (DisplayPrintDialog) ReportViewer.PrintDialog();
        else
        {
            var document = new PrintDocument(ReportViewer.LocalReport);
            document.PrinterSettings = ReportViewer.PrinterSettings;
            document.Print();
        }
        DisplayPrintDialog = false;
Run Code Online (Sandbox Code Playgroud)

问题是ForEach循环在RenderingComplete事件触发之前完成运行所以我需要一种方法来阻止我的ForEach循环,直到RenderingComplete事件为循环的每次传递触发.有什么好办法解决这个问题?

.net c# multithreading

2
推荐指数
1
解决办法
529
查看次数

WPF ListBox property binding not updating

I have the following setup:

XAML:

<ListBox x:Name="MyList" ItemsSource="{Binding MyItems}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <Image Height="20" Width="20" Visibility="{Binding HasInformation, Converter={StaticResource VC}, ConverterParameter=True}" Source="/path/to/information.png" />
                <TextBlock Text="{Binding Name}" VerticalAlignment="Center" Padding="5,0" />
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>
Run Code Online (Sandbox Code Playgroud)

Note: The ConverterParameter being passed in simply controls whether the visibility is "Collapsed" (False), or "Hidden" (True), so in this case, I want the visibility to be Hidden.

ViewModel Snippet:

private ObservableCollection<IItem> _MyItems;
public ObservableCollection<IItem> MyItems
{
    get
    {
        return _MyItems; …
Run Code Online (Sandbox Code Playgroud)

c# wpf binding listbox mvvm

2
推荐指数
1
解决办法
6104
查看次数