高分求大神帮忙

qq_38234381 青岛理工大学 2019-08-03 03:47:39
using System;
using System.Threading;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Text;

namespace Exercise11
{
class Program
{
static int Test1(int x, string s)
{
Console.WriteLine("Test1");
Thread.Sleep(100);
return 100;
}
static void Main(string[] args)
{
Func<int, string, int> a = Test1;
IAsyncResult ar = a.BeginInvoke(100, "tqt", null, null);//编译器提示这里有错
Console.WriteLine("main");
while (ar.IsCompleted == false)
Console.Write(".");
int result = a.EndInvoke(ar);
Console.WriteLine(result);
}
}
}

在VS2019中编译通过,运行时错误信息是System.PlatformNotSupportedException: Operation is not supported on this platform.
是BeginInvoke这个函数的错误吗?求大神。
...全文
118 1 收藏 9
写回复
9 条回复
qq_38234381 2019年08月04日
感谢各位的热心解答,换种写法就解决了。
回复 点赞
XBodhi. 2019年08月04日


using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Xml.Serialization;

namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Task<int> task= Test1(100, "tqt");

if (task.IsCompleted == false)
{
Console.Write(".");
}
else
{
Console.WriteLine(task.Result);
}

}


static async Task<int> Test1(int x, string s)
{
Console.WriteLine("Test1");
Thread.Sleep(100);
return 100;
}
}
}


回复 点赞
stherix 2019年08月03日
.net core 貌似不支持Func BeginInvoke 尝试用通用一点的方法代替吧 比如Task.Run await之类的改写
回复 点赞
stherix 2019年08月03日
.NET Core也能运行的啊
回复 点赞
github_36000833 2019年08月03日
新建项目时,如果'.Net Core'类别外,找不到'Windows Desktop'类别, 那么试试再运行一次Visual Studio Installer安装程序,选择’修改‘ 并添加勾选‘Dotnet Desktop Development'选项。
回复 点赞
qq_38234381 2019年08月03日
请问选择项目模板时是要选择ASP.NET Core Web 应用程序吗还是同样选择控制台应用,选择控制台应用的话我只能找到.Net Core这个目标框架,大佬能详细说下吗?
回复 点赞
github_36000833 2019年08月03日
新建一个项目,更快。
回复 点赞
qq_38234381 2019年08月03日
请问大佬我创建项目时是控制台应用(.NET Core),如何才能换成“DotNet Framework 4.0或更高”
回复 点赞
github_36000833 2019年08月03日
可能你的项目设置成了Dotnet Core了。 解决方法有两种, 一种是把项目换成DotNet Framework 4.0或更高。如果你是学习为目的,就用这种。 一种就是不用Delegate.BeginInvoke,DotNet Core摒弃了这种调用方式。你可以改用Task.Run来异步调用。

static void Main(string[] args)
{
    var task = Task.Run<int>(() => Test1(100, "tqt"));  // DotNet Core下改成Task.Run
    while(task.IsCompleted == false)
        Console.Write(".");
    int result = task.Result;
    Console.WriteLine(result);
}
回复 点赞
发动态
发帖子
C#
创建于2007-09-28

8.5w+

社区成员

64.0w+

社区内容

.NET技术 C#
社区公告
暂无公告