我没有期待
RenderTargetBitmap.Render(visual)
Run Code Online (Sandbox Code Playgroud)
有任何副作用摘录改变位图数据本身.看起来这不是真的.在一些丑陋的渲染工件开始发生之前,我无法重复超过60次.
如何在WPF中正确渲染很多精灵?下面是重现问题的代码.
我用这种方式生成精灵:
BitmapSource Sprite()
{
var bitmap = new RenderTargetBitmap(
500, 500,
96, 96,
PixelFormats.Default);
var visual = new DrawingVisual();
var rect = new Rect(
new Size(
bitmap.Width,
bitmap.Height));
using (DrawingContext context = visual.RenderOpen())
context.DrawLine(
new Pen(Brushes.Red, 100),
rect.TopLeft,
rect.BottomRight);
bitmap.Render(visual);
bitmap.Freeze();
return bitmap;
}
Run Code Online (Sandbox Code Playgroud)
这是渲染其中许多的画布:
public BitmapSource Canvas
{
get
{
var bitmap = new RenderTargetBitmap(
1980, 1080,
96, 96,
PixelFormats.Default);
var tiles = 70;
for (int i = 0; i < tiles; i++)
{
var …Run Code Online (Sandbox Code Playgroud) 如何在ASP.NET Core中正确传输响应?有这样的控制器(更新代码):
[HttpGet("test")]
public async Task GetTest()
{
HttpContext.Response.ContentType = "text/plain";
using (var writer = new StreamWriter(HttpContext.Response.Body))
await writer.WriteLineAsync("Hello World");
}
Run Code Online (Sandbox Code Playgroud)
Firefox/Edge浏览器显示
你好,世界
,Chrome/Postman报告错误:
localhost页面无效
localhost意外关闭了连接.
ERR_INCOMPLETE_CHUNKED_ENCODING
PS我即将流式传输大量内容,因此我无法提前指定Content-Length标头.
创建一个控制台应用程序来重现:
struct Test
{
public static readonly Test? Null = null;
}
class Program
{
static void Main(string[] args)
{
var t = Test.Null;
}
}
Run Code Online (Sandbox Code Playgroud)
它是可编译的,但我们将在运行时具有以下内容:
mscorlib.dll中发生了未处理的"System.TypeLoadException"类型异常.附加信息:无法从程序集"ConsoleApplication17,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null"加载类型"ConsoleApplication17.Test".
这种方法解决了这个问题:
struct Test
{
public static Test? Null => null;
}
Run Code Online (Sandbox Code Playgroud) 以下代码编译警告和intellisense错误:
ref class Test {
initonly static TimeSpan Delay = TimeSpan(1,1,1);
Test() {
long long ticks = Delay.Ticks; // << problem
}
};
Run Code Online (Sandbox Code Playgroud)
问题是:
如何正确访问Ticks?
更新:我应该尝试通过DI容器处理它还是这里的错误抽象级别?
我想使用MEF(.NET 4.5)实现抽象工厂.
它对我不起作用......
构图保持不变.由于以下错误,更改被拒绝:
该组合物产生单一组成误差.根本原因如下.查看CompositionException.Errors属性以获取更多详细信息.
1)没有找到符合约束条件的导出:
ContractName Mef3.Factory
RequiredTypeIdentity Mef3.Factory导致:无法在"Mef3.Program"部分设置导入'Mef3.Program._factory(ContractName ="Mef3.Factory")'.
元素:Mef3.Program._factory(ContractName ="Mef3.Factory") - > Mef3.Program
这是在MEF中做到这一点的正确方法吗?如何将id转发给Foo/Bar ctors?
代码:
class Program
{
static void Main(string[] args)
{
var program = new Program();
program.Run();
}
readonly CompositionContainer _container;
public Program()
{
var catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly());
_container = new CompositionContainer(catalog);
_container.ComposeParts(this);
}
[Import]
public Factory _factory;
public void Run()
{
var foo = _factory.GetInstance("foo", 123);
Console.WriteLine(foo is Foo);
}
}
[Export]
public class Factory
{
private readonly ExportFactory<Foo> _fooFactory;
private …Run Code Online (Sandbox Code Playgroud) 我可以注入CancellationToken到ASP.NET核心作用的方法,但我不希望再使用动作过滤器与它合作。如何在实施时访问取消令牌 IAsyncActionFilter?我的方法不应该把它作为参数。
您能否建议如何使其工作Kotlin?
interface SomeHandler
interface Handler<T> : SomeHandler {
fun handle(e: T)
}
class Sender(vararg val handler: SomeHandler) {
fun <T> send(e: T) {
for (h in handler)
if (h is Handler<T>)
h.handle(e) // ERROR: Cannot check for instance
// of erased type: Scratch.Handler<T>
}
}
Run Code Online (Sandbox Code Playgroud)
我只想在这里调用所有匹配的处理程序。
预计都在 .NET Core 2.0 控制台应用程序的主线程上执行,所以输出被阻塞了 10 秒:
static void Main(string[] args)
{
WriteLine($"We are on {Thread.CurrentThread.ManagedThreadId}");
var subject = new Subject<long>();
var subscription = subject.Subscribe(
i => WriteLine($"tick on {Thread.CurrentThread.ManagedThreadId}"));
var timer = Observable.Interval(TimeSpan.FromSeconds(1))
.SubscribeOn(Scheduler.CurrentThread)
.Subscribe(i => subject.OnNext(i));
Thread.Sleep(10000);
}
Run Code Online (Sandbox Code Playgroud)
但事实并非如此——随机线程每隔一秒就会有一条新行进入控制台:
Run Code Online (Sandbox Code Playgroud)We are on 1 tick on 4 tick on 5 tick on 4 tick on 4 tick on 4 tick on 4 tick on 4 tick on 4 tick on 5
我做错了什么?