gpt4 book ai didi

C# POS 打印机 API : can't find printer

转载 作者:行者123 更新时间:2023-12-05 06:37:33 32 4
gpt4 key购买 nike

我正在尝试使用 C# POS 打印机 API 构建应用程序。

我成功运行了此处提供的示例应用程序:https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/PosPrinter ,现在我正在尝试将 API 集成到我自己的 UWP 应用程序中。

这是我目前所拥有的:

public class PrinterManager
{
private PosPrinter printer = null;
private ClaimedPosPrinter claimedPrinter = null;
private bool printerClaimed = false;

public PrinterManager()
{
}

public async void EnablePrinter()
{
//find printer
printer = await PrinterHelper.GetFirstReceiptPrinterAsync();
//claim printer
printerClaimed = (claimedPrinter = await printer.ClaimPrinterAsync()) != null;
}
...
}

printerHelper.cs:

class PrinterHelper
{
public static async Task<T> GetFirstDeviceAsync<T>(string selector, Func<string, Task<T>> convertAsync)
where T : class
{
var completionSource = new TaskCompletionSource<T>();
var pendingTasks = new List<Task>();
DeviceWatcher watcher = DeviceInformation.CreateWatcher(selector);

watcher.Added += (DeviceWatcher sender, DeviceInformation device) =>
{
Func<string, Task> lambda = async (id) =>
{
T t = await convertAsync(id);
if (t != null)
{
completionSource.TrySetResult(t);
}
};
pendingTasks.Add(lambda(device.Id));
};

watcher.EnumerationCompleted += async (DeviceWatcher sender, object args) =>
{
// Wait for completion of all the tasks we created in our "Added" event handler.
await Task.WhenAll(pendingTasks);
// This sets the result to "null" if no task was able to produce a device.
completionSource.TrySetResult(null);
};

watcher.Start();

// Wait for enumeration to complete or for a device to be found.
T result = await completionSource.Task;

watcher.Stop();

return result;
}

// By default, use all connections types.
public static async Task<PosPrinter> GetFirstReceiptPrinterAsync(PosConnectionTypes connectionTypes = PosConnectionTypes.All)
{
return await GetFirstDeviceAsync(PosPrinter.GetDeviceSelector(connectionTypes),
async (id) =>
{
PosPrinter printer = await PosPrinter.FromIdAsync(id);
if (printer != null && printer.Capabilities.Receipt.IsPrinterPresent)
{
return printer;
}
// Dispose the unwanted printer.
printer?.Dispose();
return null;
});
}
}

我调用了 EnablePrinter(),我的应用程序运行无异常,但打印机在 printer = await PrinterHelper.GetFirstReceiptPrinterAsync(); 行被执行。

最佳答案

事实证明这个问题很愚蠢:

我需要转到 Package.appxmanifest --> Capabilities 并启用“服务点”。

关于C# POS 打印机 API : can't find printer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47556149/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com