相关疑难解决方法(0)

捕获活动窗口的截图?

我正在制作一个屏幕截图应用程序,一切都很顺利.我需要做的就是捕获活动窗口并截取此活动窗口的屏幕截图.有谁知道我怎么做到这一点?

c# screenshot active-window

163
推荐指数
7
解决办法
28万
查看次数

事件处理程序执行顺序

如果我设置了多个事件处理程序,如下所示:

_webservice.RetrieveDataCompleted += ProcessData1;
_webservice.RetrieveDataCompleted += ProcessData2;
Run Code Online (Sandbox Code Playgroud)

事件RetrieveDataCompleted被触发时处理程序的运行顺序是什么?它们是否在同一个线程中运行并按顺序运行?

c# asynchronous event-handling

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

如何防止和/或处理StackOverflowException?

我想要阻止或处理我在写作中StackOverflowExceptionXslCompiledTransform.Transform方法的调用Xsl Editor.问题似乎是用户可以写一个Xsl script无限递归的东西,它只是在调用Transform方法时爆炸.(也就是说,问题不仅仅是典型的编程错误,这通常是造成这种异常的原因.)

有没有办法检测和/或限制允许的递归次数?或者任何其他想法,以防止这些代码炸毁我?

.net c# stack-overflow xslcompiledtransform

68
推荐指数
4
解决办法
12万
查看次数

"创建窗口句柄时出错"

我们正在开发一个非常大的.NET WinForms复合应用程序 - 不是CAB,而是一个类似的本土框架.我们正在运行在Windows Server 2003上的Citrix和RDP环境中运行.

我们开始遇到随机和难以复制的"错误创建窗口句柄"错误,这似乎是我们的应用程序中的旧时尚句柄泄漏.我们正在大量使用第三方控件(Janus GridEX,Infralution VirtualTree和.NET Magic对接),我们根据数据库中的元数据进行了大量动态加载和内容呈现.

谷歌有很多关于这个错误的信息,但没有很多关于如何避免这方面问题的可靠指导.

stackoverflow社区是否对我构建易于操作的winforms应用程序有任何良好的指导?

.net handles winforms

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

事件订阅者是按订阅顺序调用的吗?

假设按订阅顺序调用事件订阅者是否安全?
例:

void One(object sender, EventArgs e) {}
void Two(object sender, EventArgs e) {}

event EventHandler foo;

foo += One;
foo += Two;
Run Code Online (Sandbox Code Playgroud)

当事件被触发时,One()总是在Two()之前调用吗?

编辑:
你应该不依赖它,我只是想.这个想法是,多播代表与COMMAND模式类似.所以我只是想知道.通常你会使用一个保存COMMAND命令的集合,这样你就可以做undo/redo/whatever.

.net c# events .net-2.0 c#-2.0

25
推荐指数
3
解决办法
9997
查看次数

c#从messagebox.show弹出窗口中选择文本

我一直在谷歌和stackoverflow搜索2小时.必须有一些我只是俯瞰.有没有一种简单的方法可以在消息框中选择文本?就在我现在调用MessageBox.Show()时,我无法复制显示的文本.为什么不?我如何设置文本可复制?

我的代码:

//catch all exceptions
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
            //throw;
        }
Run Code Online (Sandbox Code Playgroud)

我希望能够选择出现的错误消息,以便用户将其发送给我,我可以解决他们的问题.任何帮助是极大的赞赏.

编辑:不能使用crtl-c方法.我的用户无法掌握这个概念.需要用鼠标突出显示并右键单击以选择选项.谢谢!

编辑:作为参考我最终做的是使用答案的混合.我创建了一个带有单个按钮的弹出窗口,并在按钮操作后复制到剪贴板.它不完美,但有正确的标签,它现在运作良好.谢谢大家的建议!

//catch all exceptions
            catch (Exception ex)
            {
                //MessageBox.Show(ex.Message);
                MessageBoxButtons buttons = MessageBoxButtons.OK;
                DialogResult result;

                // Displays the MessageBox.

                result = MessageBox.Show(ex.Message + "\n\nClick OK button to copy to clipboard", "Error", buttons);

                if (result == System.Windows.Forms.DialogResult.OK)
                {

                    Clipboard.SetText(ex.Message);
                    //throw;

                }

            }
Run Code Online (Sandbox Code Playgroud)

c# text messagebox noncopyable

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

从inside方法获取方法的参数名称和值

.NET中有没有办法知道哪些参数及其值传递给方法.反思方式?这将在方法内部使用.它必须是通用的,因此可以从任何方法使用它.这是用于记录目的.

.net c#

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

找出从后台线程访问哪些winforms控件

我们已经建立了一个巨大的winforms项目,已经进行了多年.

有时,我们的用户会得到一个看起来像这样的例外.

这个问题的解决方案似乎是:

不要从后台线程访问UI组件

.

但由于我们的项目是一个非常大的项目,有很多不同的线程,我们没有成功找到所有这些.

有没有办法检查(使用某些工具或调试选项)从后台线程调用哪些组件?

澄清:

我创建了一个带有单个的winforms项目示例Form,其中包含两个Button

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        button1.Text = "Clicked!";
    }

    private void button2_Click(object sender, EventArgs e)
    {

        Task.Run(() =>
        {
            button2.BackColor = Color.Red; //this does not throw an exception
            //button2.Text = "Clicked"; //this throws an exception when uncommented
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

button2单击按钮时,背景颜色设置为红色.这发生在后台线程中(被认为是不良行为).但是,它不会(立即)抛出异常.我想用一种方法将其视为"不良行为".最好是通过扫描我的代码,但如果只能通过调试,(一旦从后台线程访问UI组件就暂停),它也没关系.

c# devexpress winforms

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

处理C#中所有异常的最简洁方法

我一直在研究处理应用程序的所有异常的最佳方法,而不会弄乱代码.这里的主要目标是将有关异常的信息发送到外部平台,例如Application Insights.到目前为止,我发现了以下方法:

  • Castle Interceptor:
    这是迄今为止最好的方法,就是要截获的方法要么是方法是虚拟的,要么是必须接口的类.由于我正在开发一个非常大的应用程序,因此不需要这些更改.

  • 事件:
    使用AppDomain还会考虑使用UnhandledException,但由于我有几个需要进行大量更改的应用程序域,因此仅针对异常来处理类,这不是最佳的,因为类不应仅仅因为异常处理而混乱.除了AppDomains的数量,我还有几个运行的线程,这种处理程序不会捕获异常.

  • PostSharp:
    PostSharp与Castle的工作方式类似,如果我理解正确,这里的问题是我必须为我想截获的所有方法添加属性/装饰器,也不是一个非常好的方法.


如果有人对这里的最佳方法有任何建议,我将非常感激.

c# events castle-windsor exception-handling

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

线程完成后捕获异常

我在单独的线程中运行一些代码,这可能会引发异常(毕竟,代码倾向于这样做)。该线程将从主线程(GUI)派生,因此最终必须在此处理异常(例如,设置错误消息文本块)。我有两种解决方案,但都不允许在GUI线程中直接捕获异常。

注:我不能用这样的东西 Task BackgroundWorker (至少不开箱),因为我需要能够改变 ApartmentState 线程的。

这是我想要的:

var thread = new Thread(() =>
{
    // Code which can throw exceptions
});

try 
{
    thread.SetApartmentState(ApartmentState.STA);
    thread.Start();
    MethodThatAwaitsThread(thread);
}
catch
{
    // Exception handling in the GUI thread
}
Run Code Online (Sandbox Code Playgroud)

这是行不通的,因为异常永远不会离开线程。我知道它不能随时离开线程,但是我可以等待线程结束然后捕获它。

这是我当前的解决方案,它利用Dispatcher与GUI线程进行通信:

var thread = new Thread(() => 
{
    try 
    {
        // Code which can throw exceptions
        Dispatcher.Invoke(UpdateGuiAsSuccess);
    }
    catch (Exception ex)
    {
        Dispatcher.Invoke(UpdateGuiAsError);
    }
}
Run Code Online (Sandbox Code Playgroud)

另一种解决方案是将Exceptionin 存储在对象中,然后在之后显式检查它。但这冒着人们忘记检查异常的风险:

Exception ex = null;    

var thread = new Thread(() …
Run Code Online (Sandbox Code Playgroud)

c# wpf multithreading

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