C# 如何使用';这';而不是Main.ActiveForm?

C# 如何使用';这';而不是Main.ActiveForm?,c#,.net,C#,.net,我有以下代码,当窗体失去焦点时(当单击另一个程序时),会引发NullReference异常: 名称空间MyProg { 公共部分类Main:表单 { 公用干管() { 初始化组件(); } 私有void主加载(对象发送方、事件参数) { 鼠标=新鼠标(); 线程=新线程(新线程开始(Mouse.Hook)); Thread.Start(); } 内部静态布尔IsTransparent=真; 内部静态空洞透明形式() { Main.ActiveForm.TransparencyKey=(Main.

我有以下代码,当窗体失去焦点时(当单击另一个程序时),会引发NullReference异常:

名称空间MyProg
{
公共部分类Main:表单
{
公用干管()
{
初始化组件();
}
私有void主加载(对象发送方、事件参数)
{
鼠标=新鼠标();
线程=新线程(新线程开始(Mouse.Hook));
Thread.Start();
}
内部静态布尔IsTransparent=真;
内部静态空洞透明形式()
{
Main.ActiveForm.TransparencyKey=(Main.IsTransparent?Color.Firebrick:Color.AliceBlue);
}
}
公共类鼠标
{
公共空钩()
{
while(true)
{
如果(Screen.AllScreens.Length>1)
{
if(光标位置X<1300)
{
Main.IsTransparent=true;
Invoke(新的MethodInvoker(Main.TransparentForm));
}
// .....
}
}
}
}

如何消除
Main.ActiveForm

根据的规范,如果程序中没有一个窗体处于活动状态(如果另一个程序具有焦点,则应返回null)


尝试将对
Main.ActiveForm.Invoke的调用包装在
if
中,该函数检查以确保
Main.ActiveForm
不为空。

作为问题的直接答案,请遵循您的代码风格:

Thread Thread = new Thread(new ParameterizedThreadStart(Mouse.Hook));
        Thread.Start(this);
然后

public void Hook(object mainObject)
    {
        Main form = (Main)mainObject;
        while(true)
        {
             // ...

为什么这个是静态的,你在哪里调用这个代码,你想做什么?你不能。它看起来是静态的,所以
这个
是没有意义的。@sa_ddam213我编辑了我的帖子以包含更多的代码。你是在加载表单后调用这个吗?@sa_ddam213是的。但是如果在
循环被启动时单击了另一个程序,那么nning时,它抛出一个null ref异常。
public void Hook(object mainObject)
    {
        Main form = (Main)mainObject;
        while(true)
        {
             // ...