Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“问题”;ISynchronizeInvoke“;及;这";在C#中。我认为某种调用可以修复它,但我可以';我不知道怎么做!_C# - Fatal编程技术网

“问题”;ISynchronizeInvoke“;及;这";在C#中。我认为某种调用可以修复它,但我可以';我不知道怎么做!

“问题”;ISynchronizeInvoke“;及;这";在C#中。我认为某种调用可以修复它,但我可以';我不知道怎么做!,c#,C#,非常感谢你阅读这篇文章!我认为修复是相对容易的,但它是超越我!我的开始总是不正确 我还在学习,还不是很好,所以请不要笑得太厉害!作为一种临时措施,我使用一些公共域代码,只是为了在我编写一些类似的东西之前,感受一下代码中正在做什么,而这些东西只包含我实际需要的位。不过,如果有人能帮忙,我真的需要答案。我已将公共域代码上传到我网站的某个区域,稍后将链接到该区域,但我认为这没有必要,因为我已从以下内容中选择了我认为重要的内容: 我的测试应用程序运行良好,但我的主应用程序运行不正常。以下是我尝试调用的方

非常感谢你阅读这篇文章!我认为修复是相对容易的,但它是超越我!我的开始总是不正确

我还在学习,还不是很好,所以请不要笑得太厉害!作为一种临时措施,我使用一些公共域代码,只是为了在我编写一些类似的东西之前,感受一下代码中正在做什么,而这些东西只包含我实际需要的位。不过,如果有人能帮忙,我真的需要答案。我已将公共域代码上传到我网站的某个区域,稍后将链接到该区域,但我认为这没有必要,因为我已从以下内容中选择了我认为重要的内容:

我的测试应用程序运行良好,但我的主应用程序运行不正常。以下是我尝试调用的方法:

public ProcessCaller(ISynchronizeInvoke isi)
    : base(isi)
{
}
下面是从我的测试应用程序调用此方法的代码。这很好用

private void btnOk_Click(object sender, System.EventArgs e)
    {
        processCaller = new ProcessCaller(this);
        processCaller.FileName = @"..\..\test.exe";
        processCaller.Arguments = "";
        processCaller.StdErrReceived += new DataReceivedHandler(writeStreamInfo);
        processCaller.StdOutReceived += new DataReceivedHandler(writeStreamInfo);
        processCaller.Completed += new EventHandler(processCompletedOrCancelled);
        processCaller.Cancelled += new EventHandler(processCompletedOrCancelled);
        // processCaller.Failed += no event handler for this one, yet.

        // the following function starts a process and returns immediately,
        // thus allowing the form to stay responsive.
        processCaller.Start();  
    }
下面是从主应用程序运行相同方法的代码。这个RunTest实际上是从一个BackGroundWorker调用的。我看到这有点毫无意义,但即使我直接运行它,删除额外的BackGroundWorker,我仍然会得到完全相同的错误,如下所述

public void RunTest()
    {
        try
        {
        processCaller = new ProcessCaller(this);
        processCaller.FileName = "test.exe";
        processCaller.Arguments = "/test";
        processCaller.StdErrReceived += new DataReceivedHandler(writeStreamInfo);
        processCaller.StdOutReceived += new DataReceivedHandler(writeStreamInfo);
        processCaller.Completed += new EventHandler(processCompletedOrCancelled);
        processCaller.Cancelled += new EventHandler(processCompletedOrCancelled);
        // processCaller.Failed += no event handler for this one, yet.

        // the following function starts a process and returns immediately,
        // thus allowing the form to stay responsive.
        processCaller.Start();
        }
   }
但是,此代码不起作用。问题是这条线。它不喜欢的是“这个”

当我尝试构建时,会出现两个错误:

参数1:无法从“App.Backend.Tools.Test”转换为“System.ComponentModel.ISynchronizeInvoke”

与“App.Backend.Tools.ProcessCaller.ProcessCaller(System.ComponentModel.ISynchronizeInvoke)”匹配的最佳重载方法具有一些无效参数

我有点理解这个问题。我不是像在我的测试应用程序中那样从我的GUI或按钮(对象发送器)调用它。我知道我需要调用它,但我不知道怎么做!如果BeginInvoke/Invoke是正确的做法,请有人告诉我怎么做

非常感谢

理查德

注:为了防止有人需要它,我上传了我在这里使用的公共域代码,但我认为没有人需要它


ProcessCaller构造函数所需的参数类型必须为
System.ComponentModel.ISynchronizeInvoke
。编译器告诉您您的“this”对象(类型为
App.Backend.Tools.Test
)未实现
ISynchronizeInvoke

更改
测试
类定义,使其实现
ISynchronizeInvoke
,类似于以下内容:

namespace App.Backend.Tools
{
    class Test : System.ComponentModel.ISynchronizeInvoke
    {
        // Existing code, as well as required implementations
        // of ISynchronizeInvoke members.
    }
}

非常感谢您的回复。它解决了我描述的问题,但并非所有问题都很好!VS在Test:ISyncronizeInvoke(实际上仅测试位)下面加下划线,错误为'App.Backend.Tools.Test'未实现接口成员'System.ComponentModel.ISynchronizeInvoke.BeginInvoke(System.Delegate,object[]),然后对.EndInvoke、.Invoke和.InvokeRequired给出基本相同的错误。有什么想法吗?我真的很感激你的帮助,废话!你甚至在评论中告诉我,我必须实施它们!很抱歉请你告诉我如何实施好吗?没有问题-阅读能力差!如果您在类声明中单击ISynchronizeInvoke,VS(2008+)会给您一个小的红色下划线,它会扩展到上下文菜单。或者,有关必须实现的属性和方法,请参见。这就解决了它!你真漂亮!我爱你(至少在某种意义上是这样!)非常感谢!理查德
namespace App.Backend.Tools
{
    class Test : System.ComponentModel.ISynchronizeInvoke
    {
        // Existing code, as well as required implementations
        // of ISynchronizeInvoke members.
    }
}