小编Đra*_*nus的帖子

实现切入跟踪元解释器序言

我有这个跟踪元解释器,从以前的问题Prolog unbind绑定变量改变.

我不明白如何解释切.感谢用户@false告诉我切割工作很糟糕,我的问题是,我应该如何在这个元解释器中实现切割?

%tracer
mi_trace(Goal):-
    mi_trace(Goal, 0).

mi_trace(V, _):-
    var(V), !, throw(error(instantiation_error, _)).
mi_trace(true, _Depth):-!, true.
mi_trace(fail, _Depth):-!, fail.
mi_trace(A > B, _Depth):-!, A > B.
mi_trace(A < B, _Depth):-!, A < B.
mi_trace(A =< B, _Depth):-!, A =< B.
mi_trace(A >= B, _Depth):-!, A >= B.
mi_trace(A = B, _Depth):-!, A = B.
mi_trace(A is B, _Depth):-!, A is B.
mi_trace(\+A, _Depth):-!, \+mi_trace(A, _Depth).
mi_trace(!, _Depth):-!, fail. % <- this is wrong
mi_trace((Goal1, Goal2), Depth):-
    !,
    mi_trace(Goal1, …
Run Code Online (Sandbox Code Playgroud)

prolog iso-prolog prolog-cut

8
推荐指数
1
解决办法
1080
查看次数

在特定线程上运行工作

我想有一个特定的线程,在这个单独的线程中为任务和进程任务排队.应用程序将根据用户使用情况制作任务,并将其排入任务队列.然后单独的线程处理任务.即使队列为空,保持线程处于活动状态并使用它来处理排队任务也是至关重要的.

我已经尝试了几个TaskSchedulerwith的实现BlockingCollection并将并发限制为只有一个线程,但是当队列变空并且任务由其他线程处理时,似乎线程被释放.

你能否至少向我推荐一些如何实现这一目标的消息来源?

tl; dr尝试限制一个特定线程来处理动态添加到队列的任务.

EDIT1:

这是使用WCF和.NET framework 4.6的实验性Web应用程序.在WCF库中,我试图用一个线程处理任务来实现此行为.这个线程必须使用外部dll库初始化prolog,然后使用prolog.如果在进程中使用了其他线程,则库会抛出AccessViolationException.我做了一些研究,这很可能是因为该库中的线程管理不当.我实现了我到处都有锁的工作方式.我现在正在尝试重新实现并使其异步,因此我不会使用锁定来阻止主线程.

我不在我的电脑上,但是当我今天晚些时候回家时,我提供了一些代码.

c# multithreading task

6
推荐指数
1
解决办法
2845
查看次数

在WP中点击控件时不要隐藏软键盘

我在Windows Phone 8.1 Store App项目中使用了这段代码(不是Silverlight):

private void CursorRightButton_Click(object sender, RoutedEventArgs e)
    {
        if (string.IsNullOrWhiteSpace(QueryTextBox.Text)) return;
        QueryTextBox.Focus(FocusState.Keyboard); //also i tried FocusState.Pointer
        QueryTextBox.Select((TextBox.SelectionStart + 1) % (TextBox.Text.Length + 1), 0);
    }
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我想以编程方式将光标移动到文本右侧,问题是它隐藏了软键盘,然后在点击按钮后再次显示它.我需要在点击此按钮时打开键盘.

我试图修改发送方和TextBox对象的Focus()方法,但我找不到任何可能的解决方案.

所以问题是,在敲击控件时,如何强制键盘不松动焦点/不隐藏?

c# button cursor windows-phone-8 windows-phone-8.1

2
推荐指数
1
解决办法
669
查看次数